1 / 17

Flyweight

Flyweight. Leonardo Simas Jussi Barros Weslley Vieira. Problema. Grande quantidade de objetos Alto custo de armazenamento Perda de performance. Problema. Nome 1. Nome 2. Nome 3. new object(). Solução. Nome 2. Nome 3. Nome 1. new object(). Flyweight. Intenção

yazid
Télécharger la présentation

Flyweight

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Flyweight Leonardo Simas Jussi Barros Weslley Vieira

  2. Problema • Grande quantidade de objetos • Alto custo de armazenamento • Perda de performance

  3. Problema Nome 1 Nome 2 Nome 3 new object()

  4. Solução Nome 2 Nome 3 Nome 1 new object()

  5. 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

  6. 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

  7. Flyweight • Estrutura Simplificada

  8. Flyweight • Estrutura mais complexa

  9. Flyweight • Diagrama de sequência

  10. 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

  11. 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

  12. Flyweight public interface class IF_Avatar { public void colorirCabelo(Color corAtual, Color corDesejada); }

  13. 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 } }

  14. FlyweightFactory publicclassAvatarFactory { privateHashMapavatares; publicAvatargetAvatar(int tipo) { Avatar a; if ( avatares.containsKey( tipo) ) { a = avatares.get( tipo ); } else { a = newAvatar( tipo ); avatares.put( tipo, a); } return a; } }

  15. 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; } }

  16. 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

  17. 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/flyweight • http://www.oodesign.com/flyweight-pattern.html

More Related