PROTOTYPE
Prototype, na ciência da computação, é um padrão de projeto de software (design pattern, em inglês) que permite a criação de objetos a partir de um modelo original, ou protótipo.
Estrutura
O padrão Prototype, da forma como foi descrito no livro Design Patterns: Elements of Reusable Object-Oriented Software, 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.
Efetivamente, cada objeto é, ele próprio, um factory especializado em construir objetos iguais a si mesmo. O padrão Prototype é utilizado freqüentemente em linguagens estaticamente tipadas como C++e Java, e menos freqüentemente utilizadas em linguagens dinamicamente tipadas como Smalltalk.
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).
UTILIZAÇÃO
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