Prototype1 - thiago

15
Grupo GWTED Davidson S. Marques Elias Rodrigues de Oliveira Gabriela Borges Diniz Teixeira Thiago César Eufrásio da Costa Walter Freitas de Brito

Transcript of Prototype1 - thiago

Grupo GWTEDDavidson S. Marques

Elias Rodrigues de Oliveira

Gabriela Borges Diniz Teixeira

Thiago César Eufrásio da Costa

Walter Freitas de Brito

É um padrão de projeto que permite a criação de objetos a partir de ummodelo original, ou seja, foi criado com o objetivo de especificar os tiposde objetos a serem criados usando uma instância-protótipo e criar novosobjetos pela cópia desse protótipo. Efetivamente, cada objeto é um factoryespecializado em construir objetos iguais a si mesmo.

O padrão Prototype contém os seguintes elementos:

• Prototype - uma classe que declara uma interface para objetos capazesde clonar a si mesmo;

• Prototype concreto - implementação de um prototype;

• Cliente - cria um novo objeto através de um prototype que é capaz declonar a si mesmo.

O padrão Prototype exige a implementação de uma operação de clonagemem cada uma das classes concretas do protótipo. Esta tarefa pode serinconveniente, no caso do reaproveitamento de classes pré-existentes quenão possuem tal operação, ou mesmo complexa, se for considerada apossibilidade de existirem referências circulares nos atributos de umobjeto (um objeto possui um atributo que referência um objeto que, porsua vez, referência o objeto original).

O padrão Prototype pode ser utilizado em sistemas que precisam serindependentes da forma como os seus componentes sãocriados, compostos e representados. O padrão Prototype pode ser útil emsistemas 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 opadrão Prototype pode ser uma alternativa mais simples, por realizar amesma tarefa com um número reduzido de classes;

• Sistemas que possuem componentes cujo estado inicial possui poucasvariações e onde é conveniente disponibilizar um conjunto pré-estabelecidode protótipos que dão origem aos objetos que compõem o sistema.

Use o padrão Prototype quando um sistema tiver que ser independente decomo os seus produtos são criados, compostos e representados e:

Quando as classes a instanciar forem especificadas em tempo deexecuçã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 poucascombinações diferentes de estados. Pode ser mais conveniente instalar umnúmero correspondente de protótipos e cloná-los, ao invés de instanciar aclasse manualmente, cada vez com um estado apropriado.

Cada subclasse de Prototype deve implementar a operação clone, o quepode ser difícil. Por exemplo, acrescentar clone é difícil quando as classesconsideradas já existem. A implementação de clone pode ser complicadaquando uma estrutura interna da classe inclui objetos que não suportamoperação de cópia ou têm referencias circulares.

Diagrama de classe:

Classe Main – será responsável por fazer as solicitações de clones de ovelhas.

.

Classe PrototypeFactory – retorna o clone de objetos quando solicitado pela classe Main.

Classe Ovelha – é o objeto que está sendo clonado. Ela implementa os métodos da classe abstrata Animal.

Classe Animal – É uma classeabstrata que implementa ainterface Cloneable do Javaque possui um método cloneresponsável por retornarclone de objetos quandoimplementado corretamente.

Saída:

Prototype assim como os outros Padrões de Projetos podem sercausadores 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.

http://pt.wikipedia.org/wiki/Prototype

http://www.guj.com.br/content/articles/patterns/prototype_pattern_guj.pdf

http://www.devmedia.com.br/post-4597-Padroes-de-projeto-em--NET--Prototype.html