Prototype também é um padrão de projeto (design pattern) criacional, seu objetivo é a criação de objetos a partir de um modelo, um protótipo já estabelecido, ele é usado em casos em que se é necessário a criação de vários objetos de uma classe cujo tais objetos sejam semelhante.
Para isso deve-se criar um objeto modelo (protótipo) clonável e fazer as atribuições que são comuns a todos os objetos ou os valores default. A classe deve implementar a interface Clonable.
public class Aluno implements Cloneable { private String nome; private String cidade; private String cep; private String universidade; private Boolean possuiDependencia; private ArrayList<Float> notas = new ArrayList<Float>(); // GETTERS AND SETTERS ... }
No metodo clone poderá ser feito a clonagem do protótipo, no caso da array, terá que ser feito um for, clonando a array manualmente, pois senão ele apenas criará uma referência para o mesmo objeto e então se um elemento for alterado em uma lista será alterado nas outras também.
protected Object clone() throws CloneNotSupportedException { Aluno novoAluno = (Aluno) super.clone(); if(this.notas != null){ novoAluno.notas = new ArrayList<Float>(); for(Float f : this.notas){ novoAluno.notas.add(f); } } return novoAluno; }
Usando:
public static void main(String[] args) throws CloneNotSupportedException { Aluno alunoPrototipo = new Aluno(); alunoPrototipo.setCidade("Cidade Default"); alunoPrototipo.setCep("Cep Default"); alunoPrototipo.setUniversidade("Universidade Defaut"); alunoPrototipo.setDependencias(false); Aluno a1 = (Aluno) alunoPrototipo.clone(); a1.setNome("José"); System.out.println(a1);
Em UML:
Referência: Aula de Engenharia de Software – Profº Marcio – Univás.