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

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

Projeto de Sistemas de Software

Apresentações semelhantes


Apresentação em tema: "Projeto de Sistemas de Software"— Transcrição da apresentação:

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

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

3 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 © LES/PUC-Rio

4 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 © LES/PUC-Rio

5 Flyweight Estrutura © LES/PUC-Rio

6 Flyweight - Participantes
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 © LES/PUC-Rio

7 Flyweight Colaborações Consequências
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 © LES/PUC-Rio

8 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{ System.out.println("UnsharedConcreteFlyweight: " + extrinsicstate); © LES/PUC-Rio

9 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; } © LES/PUC-Rio

10 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); } © LES/PUC-Rio


Carregar ppt "Projeto de Sistemas de Software"

Apresentações semelhantes


Anúncios Google