LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight.

of 17/17
LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight
  • date post

    21-Apr-2015
  • Category

    Documents

  • view

    109
  • download

    2

Embed Size (px)

Transcript of LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight.

  • Slide 1
  • LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight
  • Slide 2
  • Problema Grande quantidade de objetos Alto custo de armazenamento Perda de performance
  • Slide 3
  • Problema new object() Nome 1 Nome 2 Nome 3
  • Slide 4
  • Soluo new object() Nome 1 Nome 2Nome 3
  • Slide 5
  • Flyweight Inteno Usar compartilhamento para suportar de forma eficiente grandes quantidades de objetos Motivao Reduzir consumo de memria Reduzir custo em tempo de execuo
  • Slide 6
  • Aplicabilidade Usar Flyweight se... Uma aplicao utiliza um grande nmero de objetos Os custos so altos devido ao grande nmero de objetos Muitos grupos de objetos podem ser substitudos por relativamente poucos objetos compartilhados A aplicao no depende da identidade dos objetos
  • Slide 7
  • Flyweight Estrutura Simplificada
  • Slide 8
  • Flyweight Estrutura mais complexa
  • Slide 9
  • Flyweight Diagrama de sequncia
  • Slide 10
  • Participantes Cliente Mantm uma referncia para flyweight(s) Computa ou armazena o estado extrnseco do flyweight(s) Flyweight Declara uma interface atravs do qual flyweights podem receber e atuar sobre estados extrnsecos
  • Slide 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 instncia existente ou cria uma, se nenhuma existir. ConcretsFlyweights Implementa a interface Flyweight Armazena somente estados intrnsecos Devem ser compartilhveis
  • Slide 12
  • Flyweight public interface class IF_Avatar { public void colorirCabelo( Color corAtual, Color corDesejada ); }
  • Slide 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 ){ //animao da pintura do cabelo }
  • Slide 14
  • 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; }
  • Slide 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; }
  • Slide 16
  • Conseqncias Podem introduzir custos de tempo de execuo associados com a transferncia, busca e/ou computao de estados intrnsecos Tais custos so compensados pelas economias de espao, as quais aumentam a medida que mais flyweights so compartilhados
  • Slide 17
  • Referncias Padres de Projeto Solues reutilizveis 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