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

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

Projeto de Sistemas de Software Luana Lachtermacher

Apresentações semelhantes


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

1 Projeto de Sistemas de Software Luana Lachtermacher
Padrão Prototype Projeto de Sistemas de Software Luana Lachtermacher

2 Propósito Criação de objetos específicos através de uma instância de um protótipo. É um padrão de criação. Propósito: Os Decorators fornecem uma alternativa flexível do uso de subclasses para extensão de funcionalidades. © LES/PUC-Rio

3 Motivação Ao invés de criar diversos classes que diferem pouco, é possível fazer copias de uma instância(protótipo). Cada copia é utilizada de acordo com suas propriedades específicas. O toolkit deveria permitir a adição de propriedades, como bordas, ou comportamentos, como rolamento, para qualquer componente da interface do usuário. Há duas formas de se fazer isso: Uma forma de se adicionar responsabilidades é a herança. Herdar uma borda de uma outra classe coloca uma borda em volta de todas as instâncias de uma subclasse. Contudo, isto é inflexível, porque a escolha da borda é feita estaticamente. Um cliente não pode controlar como e quanto decorar o componente de uma borda. Uma abordagem mais flexível é embutir o componente em outro objeto que acrescenta a borda. O objeto que embute o primeiro é chamado decorator. O decorator segue a interface do componente que decora, de modo que sua presença é transparente para os clientes do componente. O decorator repassa solicitações para o componente, podendo executar ações adicionais (tais como desenhar uma borda) antes ou depois do repasse. A transparência permite encaixar decoradores recursivamente, desta forma permitindo um número ilimitado de responsabilidades adicionais. © LES/PUC-Rio

4 Aplicabilidade Sistema independente de como os produtos são criados, compostos e representados. Quando as classes são instanciadas em tempo de execução ou Para evitar a criação de classe hierárquica de fabricas que tem paralelo a hierarquia de produtos Quando instâncias da classe tem uma das poucas combinações de estados. © LES/PUC-Rio

5 Estrutura © LES/PUC-Rio

6 Participantes Prototype ConcretePrototype Client
Define a interface para se clonar ConcretePrototype Implementa uma operação para se clonar. Client Cria um novo objeto pedindo ao protótipo para se clonar. © LES/PUC-Rio

7 Colaborações O client pede ao protótipo para se clonar. © LES/PUC-Rio

8 Vantagens / Desvantagens
Vantagem : Maior abstração Adição e remoção de produtos em tempo real. That's a bit more flexible than other creational patterns, because a client can install and remove prototypes at run-time. Criação de novos objetos variando valores e estruturas. Reduced subclassing. Factory Method (107) often produces a hierarchy of Creator classes that parallels the product class hierarchy. The Prototype pattern lets you clone a prototype instead of asking a factory method to make a new object. Configurando uma aplicação com classes dinamicamente. Desvantagem: Cada subclasses necessita implementar a operação de Clonar m que pode ser complicada se incluir objetos que não suportam copia ou que possuem referencias circulares. © LES/PUC-Rio

9 Exemplo Referência : © LES/PUC-Rio

10 Exemplo public class Application {
public static void main(String[] args) { ProductCache.loadCache(); Book clonedBook = (Book) ProductCache.getProduct("B1"); DVD clonedDVD = (DVD) ProductCache.getProduct("D1"); } public abstract class Product implements Cloneable{ public Object clone() { Object clone = null; try { clone = super.clone(); } catch {} return clone; } public class Book extends Product { private int numberOfPages; public int getNumberOfPages() { return numberOfPages; } public void setNumberOfPages(int i){ numberOfPages = i; } } public class ProductCache { private static Hashtable productMap = new Hashtable(); public static Product getProduct(String productCode{ Product cachedProduct = (Product) productMap.get(productCode); return (Product) cachedProduct.clone(); } public static void loadCache() { // for each product run expensive query and instantiate product // productMap.put(productKey, product); products Book b1 = new Book(); productMap.put(b1.getSKU(), b1); DVD d1 = new DVD(); productMap.put(d1.getSKU(), d1); } } public class DVD extends Product { private int duration; public int getDuration() { return duration; } public void setDuration(int i) { duration = i; } } © LES/PUC-Rio


Carregar ppt "Projeto de Sistemas de Software Luana Lachtermacher"

Apresentações semelhantes


Anúncios Google