Flyweight e DEcorator
Flyweight
• O Flyweight é utilizado quando uma instância de uma classe pode ser usada para fornecer muitas
“instâncias virtuais”.
• É utilizado quando se necessita colocar várias instâncias iguais de um mesmo objeto que podem causar um grande custo de memória.
Flyweight
• Para solucionar este problema, o invés de se ter vários objetos iguais, o Flyweight faz com que haja apenas uma instância do objeto e um objeto-cliente para manter o estado de todos os objetos. O estado de todos os objetos virtuais é armazenado numa matriz bidimensional, enquanto um único objeto é isento de estado.
Flyweight
Flyweight
• As consequências do uso do Flyweight são:
• O Flyweight reduz o número de instâncias de objetos durante a execução, economizando memória. • Centraliza o estado de muitos objetos “virtuais” em um único local.
Flyweight
Exemplo de Aplicação: um editor de textos que permite a formatação de trechos com fontes e características diferentes em qualquer ponto do texto • O primeiro impulso é o de criar uma classe que tenha como membros o pedaço de texto em questão e a formatação aplicada - inclusive uma instância da Fonte.
Flyweight
•
Num texto muito longo e bem formatado, pode haver centenas de ocorrências. Então, o consumo de memória com a solução apresentada pode tornar a navegação no texto bastante lenta.
• E é neste caso que se aplica o Flyweight.
Flyweight
• A racionalização do uso da memória se dá através do compartilhamento das partes imutáveis das instâncias das classes.
• No caso das fontes, isso significa criar uma parte fixa com a representação gráfica de cada caractere enquanto as variações de formatação permitidas, podem ser armazenadas da forma tradicional, dentro da própria instância da classe aonde a formatação está aplicada.
Flyweight
Decorator
• Os decoradores fornecem uma alternativa flexível ao uso de subclasses para extensão de