leonardo simas jussi barros weslley vieira flyweight

17
LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

Upload: internet

Post on 21-Apr-2015

112 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

LEONARDO SIMASJUSSI BARROS

WESLLEY VIEIRA

Flyweight

Page 2: LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

Problema

Grande quantidade de objetosAlto custo de armazenamentoPerda de performance

Page 3: LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

Problema

new object()

Nome 1

Nome 2

Nome 3

Page 4: LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

Solução

new object()

Nome 1

Nome 2 Nome 3

Page 5: LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

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: LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

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: LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

Flyweight

• Estrutura Simplificada

Page 8: LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

Flyweight

• Estrutura mais complexa

Page 9: LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

Flyweight

• Diagrama de sequência

Page 10: LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

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: LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

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: LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

Flyweight

public interface class IF_Avatar {

public void colorirCabelo(Color corAtual, Color corDesejada);

}

Page 13: LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

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: LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

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: LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

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: LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

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: LEONARDO SIMAS JUSSI BARROS WESLLEY VIEIRA Flyweight

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