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