Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouNicolas Padua Alterado mais de 10 anos atrás
1
Projeto de Sistemas de Software Kelly Leal Leandra Mara da Silva
Design Patterns Projeto de Sistemas de Software Kelly Leal Leandra Mara da Silva
2
Motivação Aprimorar conhecimentos sobre Projeto de Sistemas de Software, realizando um estudo incremental dos Padrões de Projeto apresentados em [GoF]. © LES/PUC-Rio
3
Padrão Flyweight
4
Flyweight Classificação Propósito Estrutural de Objeto
Usar compartilhamento para suportar eficientemente grandes quantidades de objetos de granularidade fina. Objetos de Granularidade Fina: objetos que diferem-se um do outro apenas por alguns detalhes. Ele é um padrão estrutural de objeto: descrevem maneiras de montar objetos Uma tradução seria peso mosca. Forma um pool de objetos imutáveis para serem utilizados em diversas partes do sistema. Peso-mosca (Objeto) Usa compartilhamento para suportar um grande número de pequenos objetos de forma eficiente. © LES/PUC-Rio
5
Flyweight Motivação Aplicações que utilizam grande número de objetos p
Exemplo de Problema: desenvolver um editor de texto onde cada caracter é representado por um objeto. Pode não haver recursos (memória) sufientes para textos muito grandes. p u b /* Trabalho de PSS*/ Objeto Linha l Editores de Documento orientados a objeto Documentos podem requerer centenas de milhares de objetos- caracteres Problema: muitos objetos; grande consumo de memória; possibilidade de custo inaceitável em tempo de execução Caracteres se repetem. Por que não compartilhar caracteres que já foram criados previamente? Seria porque eles apresentam posições e formatações diferentes? i public static ... c Objeto Linha System.out.println ... © LES/PUC-Rio
6
System.out.println (“Poj. de Sistemas de Software”)
Flyweight Motivação Aplicações que utilizam grande número de objetos Exemplo de solução: monta-se um pool de objetos compartilhados. Cada caracter tem um objeto. Com 100 objetos (tabela ASCII) poderíamos montar textos de qualquer tamanho System.out.println (“Poj. de Sistemas de Software”) Editores de Documento orientados a objeto Documentos podem requerer centenas de milhares de objetos- caracteres Problema: muitos objetos; grande consumo de memória; possibilidade de custo inaceitável em tempo de execução Caracteres se repetem. Por que não compartilhar caracteres que já foram criados previamente? Seria porque eles apresentam posições e formatações diferentes? Logicamente: Existe um objeto para cada ocorrência de caractere Fisicamente: Existe um objeto compartilhado flyweight por caractere e ele aprece em diferentes contextos no documento. Cada ocorrência faz referência a uma mesma instância do poll. a b c d e f g . . . Pool de Flyweight © LES/PUC-Rio
7
Flyweight Observações:
O padrão procura fatorar as informações comuns a diversos objetos. Desassocia o que é intrínseco do que é extrínseco ao objeto Intrínseco: inerente, próprio do objeto. Informações independentes de contexto, podendo, por isso, ser compartilhadas. Essas informações são armazenadas no flyweight. Extrínseco: depende e varia com o contexto, não podendo, por isso, ser compartilhado. Tal estado é armazenado no cliente. © LES/PUC-Rio
8
Flyweight Aplicabilidade Aplicação utiliza grande número de objetos
Custos de armazenamento altos A maior parte dos estados de objetos pode ser tornada extrínseca (estados externalizados) Muitos objetos podem ser substituídos por poucos objetos compartilhados Aplicação não depende da identidade dos objetos. obs: testes de identidade produzirão o valor verdadeiro para objetos conceitualmente distintos. © LES/PUC-Rio
9
Flyweight © LES/PUC-Rio
10
Flyweight Participantes Flyweight ConcreteFlyweight
Define a interface através da qual os objetos flyweight recebem e agem em relação ao estado extrínseco ConcreteFlyweight Implementa a interface flyweight e adiciona as características intrínsecas, se houver UnsharedConcreteFlyweight Nem todas as subclasses flyweight precisam ser compartilhadas A interface flyweight permite o compartilhamento, mas não obriga a utilizá-lo FlyweightFactory Cria e gerencia os objetos flyweight Garante que o compartilhamento está correto Client Mantém uma referência ao flyweight Armazena o estado extrínseco do flyweight © LES/PUC-Rio
11
Flyweight Colaborações Conseqüências
O estado intrínseco é armazenado no objeto ConcreteFlyweight O estado extrínseco é armazenado no objeto Client, que passam ao flyweight quando chamam suas operações Os clientes não instanciam o ConcreteFlyweight diretamente Conseqüências Pode aumentar o processamento Redução do número de instâncias de classes Utilizado com o auxílio do padrão Composite para permitir a representação de grafos © LES/PUC-Rio
12
Flyweight © LES/PUC-Rio
13
Flyweight © LES/PUC-Rio
14
Fim!!
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.