Olá pessoal!
Hoje vamos falar um pouco sobre um padrão de criação bem simples, o padrão Prototype. Esse padrão tem como objetivo criar um "clone", ou seja, uma cópia, de um determinado objeto. Segue abaixo a definição do nosso livro base:
"Especificar os tipos de objetos a serem criados usando uma instância-protótipo e criar novos objetos pela cópia desse protótipo." [GAMMA, 2009].
Um dos diversos cenários que podemos aplicar o padrão Prototype é quando necessitamos guardar o estado de um objeto, em determinados pontos de execução de um processamento, por exemplo. Na maioria das vezes, é mais interessante criarmos "clones", ou cópias, de um objeto em determinado momento, do que criar a instância manualmente.
A estrutura do padrão Prototype é a seguinte:

O padrão Prototype pode ser implementado em conjunto com os padrões AbstractFactory, Composite e Decorator. Estudaremos em breve sobre os dois últimos padrões citados.
No código de exemplo, criaremos uma classe abstrata chamada Ave que implementa a interface ICloneable, e uma classe concreta Calopsita que herda de Ave. O projeto completo pode ser baixado aqui: Prototype.zip (20,74 kb)
Segue o código implementado junto com a classe de teste:



O resultado:

Repare que o nome dos dois objetos é o mesmo, porém o código hash é diferente, ou seja, são objetos do mesmo tipo e com as mesmas características, porém, são objetos distintos.
Esse é o padrão Prototype, muito simples e fácil de entender e utilizar.
Até a próxima!
Referência Bibliográfica
GAMMA, Erich, Padrões de Projeto, Porto Alegre: Bookman, 2009.
50f4b47d-9277-4729-ba66-6a16b948cfd4|1|4.0