Padrões de Projeto Prototype

Boa tarde galera!!

Aí estou com um pequeno problema!!
Eu tenho minha fabrica de protótipos ela cria um clone a partir de um objeto existente.

Na classe de definição do obejto tinha os seguintes atributos:

private String carro;
private String marcaCarro;

Mas agora eu preciso add um proprietario ficando assim:
private String carro;
private String marcaCarro;
private String proprietario;

O unico problema é? quando pesso para alterar o proprietario ainda estou alterando o atributo oringianl e não o clone, isso não deveria acontecer!!

Alguem sabe como posso criar o clone de proprietario tbm?
Alguem tem uma solução para esse problema?

grato

Post seu código, mas acredito que vc esteja ainda referenciando a mesma posição de memória…

aÍ O código:
package br.upis.prototype;

public class Animal implements Cloneable {
private String nomeAnimal;
private String racaAnimal;
private Pessoa proprietario;

public void setRacaAnimal(String raca) {
	this.racaAnimal = raca;
}

public String getRacaAnimal() {
	return racaAnimal;
}

public String getNomeAnimal() {
	return nomeAnimal;
}

public void setNomeAnimal(String nomeAnimal) {
	this.nomeAnimal = nomeAnimal;
}

public void andar() {
	System.out.println(this.getNomeAnimal() + " esta andando...");
}

public void comer() {
	System.out.println(this.getNomeAnimal() + " esta comendo...");
}

public Pessoa getProprietario() {
	return proprietario;
}

public void setProprietario(Pessoa proprietario) {
	this.proprietario = proprietario;
}

public Object clone() {
	Object obj = null;

	try {
		obj = super.clone();
	} catch (Exception e) {
		e.printStackTrace();
	}
	return obj;
}

}

package br.upis.prototype;

public class Ovelha extends Animal {

public Ovelha(String nomeAnimal, String racaAnimal, Pessoa proprietario) {
	setNomeAnimal(nomeAnimal);
	setRacaAnimal(racaAnimal);
	setProprietario(proprietario);

}

}

package br.upis.prototype;

public class PrototypeFactory {

Animal protAnimal;

public PrototypeFactory(Animal animal) {
	this.protAnimal = animal;
}

public Animal geraClone() {
	return (Animal) protAnimal.clone();
}

}

package br.upis.prototype;

public class Pessoa {
private String nome;

public Pessoa() {

}

public Pessoa(String nome) {
	this.nome = nome;
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

}

package br.upis.prototype;

public class Principal2 {
public static void main(String[] args) {
Pessoa proprietario = new Pessoa(“Guilherme”);
Animal matriz = new Ovelha(“Dolly”, “Damara”, proprietario);

	System.out.println("Matriz: " + matriz);
	System.out.println(matriz.getNomeAnimal());
	System.out.println(matriz.getRacaAnimal());
	System.out.println("Pessoa: " + matriz.getProprietario());
	System.out.println(matriz.getProprietario().getNome());
	System.out.println("-----------------------");

	PrototypeFactory p = new PrototypeFactory(matriz);
	Animal clone = p.geraClone();

	clone.getProprietario().setNome("Gustavo");

	System.out.println("Clone: " + clone);
	System.out.println(clone.getNomeAnimal());
	System.out.println(clone.getRacaAnimal());
	System.out.println("Pessoa: " + clone.getProprietario());
	System.out.println(clone.getProprietario().getNome());
	System.out.println("-----------------------");

	System.out.println("Matriz: " + matriz);
	System.out.println(matriz.getNomeAnimal());
	System.out.println(matriz.getRacaAnimal());
	System.out.println("Pessoa: " + matriz.getProprietario());
	System.out.println(matriz.getProprietario().getNome());
	System.out.println("-----------------------");

}

}

A classe Pessoa também deve implementar Cloneable… por regra sempre que vc precisa usar clone() todos os beans envolvidos precisam implementar Cloneable senão ficam apontando para o mesmo objeto.

Aqui tem mais informações sobre o assunto http://en.wikipedia.org/wiki/Clone_(Java_method)

Vlw aí fera!!