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