Flyweight
description
Transcript of Flyweight
![Page 1: Flyweight](https://reader035.fdocumentos.tips/reader035/viewer/2022062519/56814f2c550346895dbcb7b3/html5/thumbnails/1.jpg)
LEONARDO SIMASJUSSI BARROS
WESLLEY VIEIRA
Flyweight
![Page 2: Flyweight](https://reader035.fdocumentos.tips/reader035/viewer/2022062519/56814f2c550346895dbcb7b3/html5/thumbnails/2.jpg)
Problema
Grande quantidade de objetosAlto custo de armazenamentoPerda de performance
![Page 3: Flyweight](https://reader035.fdocumentos.tips/reader035/viewer/2022062519/56814f2c550346895dbcb7b3/html5/thumbnails/3.jpg)
Problema
new object()
Nome 1
Nome 2
Nome 3
![Page 4: Flyweight](https://reader035.fdocumentos.tips/reader035/viewer/2022062519/56814f2c550346895dbcb7b3/html5/thumbnails/4.jpg)
Solução
new object()
Nome 1
Nome 2 Nome 3
![Page 5: Flyweight](https://reader035.fdocumentos.tips/reader035/viewer/2022062519/56814f2c550346895dbcb7b3/html5/thumbnails/5.jpg)
Flyweight
Intenção Usar compartilhamento para suportar de forma
eficiente grandes quantidades de objetos
Motivação Reduzir consumo de memória Reduzir custo em tempo de execução
![Page 6: Flyweight](https://reader035.fdocumentos.tips/reader035/viewer/2022062519/56814f2c550346895dbcb7b3/html5/thumbnails/6.jpg)
Aplicabilidade
Usar Flyweight se...
Uma aplicação utiliza um grande número de objetos
Os custos são altos devido ao grande número de objetos
Muitos grupos de objetos podem ser substituídos por relativamente poucos objetos compartilhados
A aplicação não depende da identidade dos objetos
![Page 7: Flyweight](https://reader035.fdocumentos.tips/reader035/viewer/2022062519/56814f2c550346895dbcb7b3/html5/thumbnails/7.jpg)
Flyweight
• Estrutura Simplificada
![Page 8: Flyweight](https://reader035.fdocumentos.tips/reader035/viewer/2022062519/56814f2c550346895dbcb7b3/html5/thumbnails/8.jpg)
Flyweight
• Estrutura mais complexa
![Page 9: Flyweight](https://reader035.fdocumentos.tips/reader035/viewer/2022062519/56814f2c550346895dbcb7b3/html5/thumbnails/9.jpg)
Flyweight
• Diagrama de sequência
![Page 10: Flyweight](https://reader035.fdocumentos.tips/reader035/viewer/2022062519/56814f2c550346895dbcb7b3/html5/thumbnails/10.jpg)
Participantes
Cliente Mantém uma referência para flyweight(s) Computa ou armazena o estado extrínseco do
flyweight(s)
Flyweight Declara uma interface através do qual flyweights
podem receber e atuar sobre estados extrínsecos
![Page 11: Flyweight](https://reader035.fdocumentos.tips/reader035/viewer/2022062519/56814f2c550346895dbcb7b3/html5/thumbnails/11.jpg)
Participantes
FlyweightFactory Cria e gerencia objetos flyweights Garante que os flyweights sejam compartilhados
apropriadamente. Quando um cliente solicita um flyweight, um objeto FlyweightFactory fornece uma instância existente ou cria uma, se nenhuma existir.
ConcretsFlyweights Implementa a interface Flyweight Armazena somente estados intrínsecos Devem ser compartilháveis
![Page 12: Flyweight](https://reader035.fdocumentos.tips/reader035/viewer/2022062519/56814f2c550346895dbcb7b3/html5/thumbnails/12.jpg)
Flyweight
public interface class IF_Avatar {
public void colorirCabelo(Color corAtual, Color corDesejada);
}
![Page 13: Flyweight](https://reader035.fdocumentos.tips/reader035/viewer/2022062519/56814f2c550346895dbcb7b3/html5/thumbnails/13.jpg)
ConcreteFlyweight
public class Avatar implements IF_Avatar { protected Corpo corpo = new Corpo();
protected Cabelo cabelo = new Cabelo();
public void colorirCabelo(Color corAtual, Color corDesejada){
//animação da pintura do cabelo}
}
![Page 14: Flyweight](https://reader035.fdocumentos.tips/reader035/viewer/2022062519/56814f2c550346895dbcb7b3/html5/thumbnails/14.jpg)
FlyweightFactory
public class AvatarFactory {
private HashMap avatares;
public Avatar getAvatar(int tipo) {Avatar a;if ( avatares.containsKey( tipo) ) {
a = avatares.get( tipo ); } else {
a = new Avatar( tipo );avatares.put( tipo, a);
} return a;
}}
![Page 15: Flyweight](https://reader035.fdocumentos.tips/reader035/viewer/2022062519/56814f2c550346895dbcb7b3/html5/thumbnails/15.jpg)
Cliente
public class Usuario{private Color corCabelo = new Color(000000);private Avatar avatar = avatarFactory.getAvatar ();
public void colorirCabelo(Color corDesejada){avatar.colorirCabelo(this.corCabelo,
corDesejada);this.corCabelo = corDesejada;
}
}
![Page 16: Flyweight](https://reader035.fdocumentos.tips/reader035/viewer/2022062519/56814f2c550346895dbcb7b3/html5/thumbnails/16.jpg)
Conseqüências
Podem introduzir custos de tempo de execução associados com a transferência, busca e/ou computação de estados intrínsecos
Tais custos são compensados pelas economias de espaço, as quais aumentam a medida que mais flyweights são compartilhados
![Page 17: Flyweight](https://reader035.fdocumentos.tips/reader035/viewer/2022062519/56814f2c550346895dbcb7b3/html5/thumbnails/17.jpg)
Referências
Padrões de Projeto Soluções reutilizáveis de software orientados a
objetos Erich Gamma, Richard Helm, Ralph Johnson e John
Vlissides
http://sourcemaking.com/design_patterns/flyweighthttp://www.oodesign.com/flyweight-pattern.html