A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Flyweight Projeto de Sistemas de Software Roberta Claudino Barreto Pessanha Gomes Ugo Braga Sangiorgi.

Apresentações semelhantes


Apresentação em tema: "Flyweight Projeto de Sistemas de Software Roberta Claudino Barreto Pessanha Gomes Ugo Braga Sangiorgi."— Transcrição da apresentação:

1 Flyweight Projeto de Sistemas de Software Roberta Claudino Barreto Pessanha Gomes Ugo Braga Sangiorgi

2 2 © LES/PUC-Rio Flyweight Propósito Usar compartilhamento para suportar uma grande quantidade de objetos de baixa granularidade de forma eficiente

3 3 © LES/PUC-Rio Flyweight Motivação –Abstrair até o último nível é custoso –Um Flyweight é um objeto compartilhado que pode ser usado em vários contextos ao mesmo tempo possui um estado intrínseco (comum a todos os contextos) se utiliza de vários estados extrínsecos (particulares a cada contexto) –Ex.: Editor de Texto

4 4 © LES/PUC-Rio Flyweight Aplicabilidade –A aplicação usa muito objetos –A aplicação não depende da identidade de cada objeto individualmente –Custo de armazenar os objetos é alto –O estado de cada objeto pode ser armazenado fora dele –Grupos de objetos podem ser substituídos por alguns objetos compartilhados

5 5 © LES/PUC-Rio Flyweight Estrutura

6 6 © LES/PUC-Rio Flyweight - Participantes Flyweight –Declara a interface pela qual os flyweights recebem e agem no estado extrínsico ConcreteFlyweight –É compartilhado UnsharedConcreteFlyweight –NÃO é compartilhado, é comum conter ConcreteFlyweights FlyweightFactory –Compartilha os Flyweights quando já existem e cria quando ainda não existem Client –Mantém referências para os Flyweights –Armazena o estado extrínsico

7 7 © LES/PUC-Rio Flyweight Colaborações –Clientes devem obter Flyweights exclusivamente da Factory –Estado intrínseco é armazenado no ConcreteFlyweight –Estado extrínseco é computado ou armazenado pelo Cliente. Clientes passam o estado ao flyweight. Consequências –Custos de run-time associados com transferência, busca e/ou computação do estado extrínseco compensados pela economia em uso de memória à medida que mais flyweights são criados –Redução de consumo de memória Redução do total de instâncias resultantes do compartilhamento Quantidade de estado intrínseco por objeto Se o estado extrínseco é armazenado ou computado

8 8 © LES/PUC-Rio Flyweight - Participantes Implementação –Flyweight public interface Flyweight { public void Operation(int extrinsicstate); } –ConcreteFlyweight public class ConcreteFlyweight implements Flyweight{ public void Operation(int extrinsicstate) { System.out.println("ConcreteFlyweight :" + extrinsicstate); } –UnsharedConcreteFlyweight public class UnsharedConcreteFlyweight implements Flyweight{ public void Operation(int extrinsicstate) { System.out.println("UnsharedConcreteFlyweight: " + extrinsicstate); }

9 9 © LES/PUC-Rio Flyweight - Participantes Implementação –FlyweightFactory import java.util.ArrayList; public class FlyweightFactory { ArrayList flyweights = new ArrayList(); public Flyweight GetFlyweight(int key) { if (flyweights.contains(key)){ return ((Flyweight) flyweights.get(key)); }else { Flyweight fly = new ConcreteFlyweight(); flyweights.add(key, fly); return fly; }

10 10 © LES/PUC-Rio Flyweight - Participantes Implementação –Client public class Client { public static void main(String[] args) { int extrinsicstate = 12; // Estado extrínseco FlyweightFactory f = new FlyweightFactory(); Flyweight f0 = f.GetFlyweight(0); f0.Operation(--extrinsicstate); Flyweight f1 = f.GetFlyweight(1); f1.Operation(--extrinsicstate); Flyweight f2 = f.GetFlyweight(2); f2.Operation(--extrinsicstate); Flyweight f3 = f.GetFlyweight(3); f3.Operation(--extrinsicstate); UnsharedConcreteFlyweight uf = new UnsharedConcreteFlyweight(); uf.Operation(--extrinsicstate); }


Carregar ppt "Flyweight Projeto de Sistemas de Software Roberta Claudino Barreto Pessanha Gomes Ugo Braga Sangiorgi."

Apresentações semelhantes


Anúncios Google