Design Patterns Prototype Projeto de Sistemas de Software Gustavo Soares Souza [email protected] Sumário • Prototype o o o o o o o o Propósito Motivação Aplicabilidade Estrutura Participantes Colaboradores Consequência Exemplo © LES/PUC-Rio Design Patterns – – – – – – – – – – – – Abstract Factory Builder Factory Method Prototype Singleton Adapter Bridge Composite Decorator Facade Flyweight Proxy • • • • • • • • • • • Chain of Responsibility Command Interpreter Iterator Mediator Memento Observer State Strategy Template Method Visitor Padrões de Criação Padrões Estruturais Padrões de Comportamento © LES/PUC-Rio Prototype Motivação • Evitar o custo computacional na criação de objetos com a palavra chave new como a maioria dos padrões de criação sugerem • Imagine um cientista trabalhando em um laboratório que deseja poder clonar animais, preservando todo o seu material genético • Para cada tipo de animal o cientista já tem um modelo (protótipo) já pronto para clone • Fazendo uma abstração para sistemas de softwares, o ideal seria que o cientista nao precisasse conhecer os protótipos existentes para cada um dos animais, ele apenas diz para a classe Animal, por exemplo, que ele deseja clonar uma ovelha © LES/PUC-Rio Prototype Propósito • Criar objetos específicos a partir da instância de um protótipo, permitindo criar novos objetos a partir da cópia (clone) deste protótipo • Objetos são criados a partir de um modelo © LES/PUC-Rio Prototype Aplicabilidade • Altamente recomendado quando um sistema precisa ser independente da forma como seus componentes são criados, representados e compostos • Quando as classes a serem instanciadas são especificadas em tempo de execucação • Sistemas onde pode ser conveniente disponibilizar um conjunto préestabelecido de protótipos que dão origem aos objetos que compoe o sistema © LES/PUC-Rio Prototype Estrutura © LES/PUC-Rio Prototype Participantes • Prototype o • interface ou classe abstrata que define o método para clonar a si próprio ConcretePrototype o implementa o método para clonar a si próprio • Client o cria um novo objeto solicitando a um protótipo uma cópia de si mesmo © LES/PUC-Rio Prototype Colaboração • A interação entre os participantes deste padrão é bem simples. Um cliente requisita a um Protótipo um clone de si próprio © LES/PUC-Rio Prototype Consequência • Adição e remoção de classes em tempos de execução • Redução do número de subclasses, uma vez que se pode clonar um protótipo em vez de pedir a um método (Abstract Factory) para construir um novo objeto. • O cliente tem que interagir com a interface (ou classe abstrata) Prototype, já que a classe ConcretePrototype estão isoladas do cliente • Cada subclasse (ConcretePrototype) tem que implementar o método clone, caso contrário a clonagem não será possível. Isso se torna difícil para classe que já existem no sistema © LES/PUC-Rio Prototype Exemplo © LES/PUC-Rio Prototype Exemplo © LES/PUC-Rio Fim!!