Projeto de Sistemas de Software
Padrões de Projeto: Prototype
Equipe:
Bruno Silva de Carvalho
Prototype
Propósito do padrão:
Especificar os tipos de objetos a serem criados usando uma instância protótipo
e criar novos objetos pela cópia deste protótipo.
Prototype
Motivação:

Role-playing game;

Aplicativos gráficos;

Outros.
Prototype
Aplicabilidade:

Quando o sistema não depende de como seus objetos são criados;

Quando as classes a instanciar são especificadas em tempo de execução;

Quando é mais conveniente instalar um número de protótipos e cloná-los do
que instanciar manualmente um em cada estado.
Prototype
Estrutura:
Prototype
Participantes:

Prototype;


ConcretePrototype;


Declara uma interface para clonar a si próprio.
Implementa uma operação para clonar a si próprio.
Client.

Cria um novo objeto solicitando a um protótipo que clone a si próprio.
Prototype
Colaborações:
Um cliente solicita a um protótipo que este clone a si próprio.
Prototype
Conseqüências:

Acrescenta e remove produtos em tempo de execução;

Especifica objetos novos pela variação de valores;

Reduz o número de subclasses;

Obriga cada subclasse de Prototype implementar o método clone.
Prototype
Exemplos de código:
public interface AddressClone {
public Object clone();
}
Prototype
Exemplos de código:
public class Address implements AddressClone{
private String type, street, city, state, zipCode;
public Address(String initType, String initStreet, String initCity, String initState, String
initZip){
type = initType;
street = initStreet;
city = initCity;
state = initState;
zipCode = initZip;
}
public Address() {}
public Object clone(){
return new Address(type, street, city, state, zipCode);
}
public String toString(){...}
}
Prototype
Exemplos de código:
public class RunPrototype {
public static void main(String[] args) {
System.out.println("Exemplo do padrão Prototype.");
System.out.println("Este exemplo vai criar um objeto endereço");
System.out.println("e depois duplica-lo com o método clone.");
System.out.println("Criando primeiro endereço:");
Address address1 = new Address("Casa", "Avenida das Américas", "Rio de Janeiro", "RJ",
"23020-470");
System.out.println("Primeiro endereço criado.");
System.out.println("Hash code 1 = " + address1.hashCode());
System.out.println(address1.toString());
System.out.println("Criando segundo endereço e usando o método clone:");
Address address2 = (Address)address1.clone();
System.out.println("Segundo endereço criado.");
System.out.println("Hash code 2 = " + address2.hashCode());
System.out.println(address2.toString());
}
}
Prototype
Exemplos de código:
Exemplo do padrão Prototype.
Este exemplo vai criar um objeto endereço
e depois duplica-lo com o método clone.
Criando primeiro endereço:
Primeiro endereço criado.
Hash code 1 = 11394033
Avenida das Américas, Rio de Janeiro, RJ, 23020-470
Criando segundo endereço e usando o método clone:
Segundo endereço criado.
Hash code 2 = 4384790
Avenida das Américas, Rio de Janeiro, RJ, 23020-470
Download

Slides - (LES) da PUC-Rio