Design Patterns
Projeto de Sistemas de Software
Kelly Leal
Leandra Mara da Silva
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
Padrão Flyweight
Flyweight
• Classificação
– Estrutural de Objeto
• Propósito
– Usar compartilhamento para suportar eficientemente grandes
quantidades de objetos de granularidade fina.
© LES/PUC-Rio
Flyweight
• Motivação
– Aplicações que utilizam grande número de objetos
• 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*/
l
Objeto
Linha
i
public static ...
c
System.out.println ...
© LES/PUC-Rio
Objeto
Linha
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”)
a
b
c
d
e
f
g
...
Pool de Flyweight
© LES/PUC-Rio
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
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
Flyweight
© LES/PUC-Rio
Flyweight
• Participantes
– Flyweight
• 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
Flyweight
• Colaborações
– 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
Flyweight
© LES/PUC-Rio
Flyweight
© LES/PUC-Rio
Fim!!
Download

Flyweight - (LES) da PUC-Rio