O documento descreve o padrão de projeto Prototype, que permite a criação de objetos a partir de um modelo original através da cópia de um protótipo. O padrão contém um protótipo, classes concretas de protótipo e um cliente. Ele é útil quando objetos precisam ser criados de forma independente e em sistemas com classes definidas em tempo de execução.
1. Grupo GWTED
Davidson S. Marques
Elias Rodrigues de Oliveira
Gabriela Borges Diniz Teixeira
Thiago César Eufrásio da Costa
Walter Freitas de Brito
2. É um padrão de projeto que permite a criação de objetos a partir de um
modelo original, ou seja, foi criado com o objetivo de especificar os tipos
de objetos a serem criados usando uma instância-protótipo e criar novos
objetos pela cópia desse protótipo. Efetivamente, cada objeto é um factory
especializado em construir objetos iguais a si mesmo.
3. O padrão Prototype contém os seguintes elementos:
• Prototype - uma classe que declara uma interface para objetos capazes
de clonar a si mesmo;
• Prototype concreto - implementação de um prototype;
• Cliente - cria um novo objeto através de um prototype que é capaz de
clonar a si mesmo.
4. O padrão Prototype exige a implementação de uma operação de clonagem
em cada uma das classes concretas do protótipo. Esta tarefa pode ser
inconveniente, no caso do reaproveitamento de classes pré-existentes que
não possuem tal operação, ou mesmo complexa, se for considerada a
possibilidade de existirem referências circulares nos atributos de um
objeto (um objeto possui um atributo que referência um objeto que, por
sua vez, referência o objeto original).
5. O padrão Prototype pode ser utilizado em sistemas que precisam ser
independentes da forma como os seus componentes são
criados, compostos e representados. O padrão Prototype pode ser útil em
sistemas com as seguintes características:
• Sistemas que utilizam classes definidas em tempo de execução;
• Sistemas que utilizam o padrão Abstract Factory para criação de objetos.
Neste caso, a hierarquia de classes pode se tornar muito complexa e o
padrão Prototype pode ser uma alternativa mais simples, por realizar a
mesma tarefa com um número reduzido de classes;
• Sistemas que possuem componentes cujo estado inicial possui poucas
variações e onde é conveniente disponibilizar um conjunto pré-estabelecido
de protótipos que dão origem aos objetos que compõem o sistema.
6. Use o padrão Prototype quando um sistema tiver que ser independente de
como os seus produtos são criados, compostos e representados e:
Quando as classes a instanciar forem especificadas em tempo de
execução, por exemplo, por carga dinâmica;
Para evitar a construção de uma hierarquia de classes de fábricas paralela à
hierarquia de classes de produto;
Quando as instâncias de uma classe puderem ter uma dentre poucas
combinações diferentes de estados. Pode ser mais conveniente instalar um
número correspondente de protótipos e cloná-los, ao invés de instanciar a
classe manualmente, cada vez com um estado apropriado.
7. Cada subclasse de Prototype deve implementar a operação clone, o que
pode ser difícil. Por exemplo, acrescentar clone é difícil quando as classes
consideradas já existem. A implementação de clone pode ser complicada
quando uma estrutura interna da classe inclui objetos que não suportam
operação de cópia ou têm referencias circulares.
11. Classe Ovelha – é o objeto que está sendo clonado. Ela implementa os
métodos da classe abstrata Animal.
12. Classe Animal – É uma classe
abstrata que implementa a
interface Cloneable do Java
que possui um método clone
responsável por retornar
clone de objetos quando
implementado corretamente.
14. Prototype assim como os outros Padrões de Projetos podem ser
causadores de confiabilidade, reusabilidade e manutenibilidade de código.
Também podem ser capazes de economizar tempo e custo.
Podemos perceber que as vantagens são maiores que as desvantagens.