Mehmet Ethem SULAN :: Java Tasarım Şablonları :: Prototip Tasarım Şablonu ile Cloneable Interface ve clone() Metodunun Java Örneği(Prototype Design Pattern)

uml

Dia: http://prntscr.com/54k9 Clone() object sınıfnda yer aldığı için tüm nesnelerin klonları alınabilir.Yanı java nesnelerin hiyerarşinin en üstündeki objet sınıfında yer alır.hashCode() nesnelerin nerde olduğunu yada nesneyi tanımlayan bir belirteçtir.Bizim tc no gibi.Bellekteki adresin hexadeciaml olarak hashCode() yanı kimlik no olarak atanır.Klonlama ilede nesne oluşturulur ve mevcut nesne taban alınarak referans boyutu kadar ilk nesneye eklenerek ikinci bir nesne oluşturulur.New kullanmadan ikinci nesne oluşturuluyor.

package www.ethemsulan.com;
public class TestSinifi {
public static void main(String[] args) throws CloneNotSupportedException {
Kisi nesnem=new Kisi("Buyuklerimiz", 
	"Dedelerimiz", "Babamiz", "SULAN");
	nesnem.setBizimIsmimiz("Ethem");
	nesnem.ortakBilgileriYaz();
System.out.println("Birinci nesne tcNo:"+nesnem.hashCode());
//yukardaki nesneyi kopyalıyor.Belelktede ikl nesne boyutu + referans boyutu kadar
//başka bir adresten başlayarak nesne için yer ayrılır.Ve bu yeni
//klonlanan nesne bilgileri burada tutulur.Bu örnekte tüm bilgiler ortak sadece 
//kardeşleri sıraladık.Yani bir babanın çocuklarının hiyerarşileri aynı
//Bu şablon sınıf adedini azaltır.Karmaşık ve uzun işlem gereken 
//nesnelerde klonlama yolu seçilir.Başka bir avantajı ise 
//istediğimiz özelliği değiştirebiliriz.Yanı bir çok ortak 
//özellikten sadece birini değiştirmeye gerek duyulan durumlarda
//nesneyi klonlayıp o özelliği değiştirmek daha karlı olur.
	Kisi nesnem2=(Kisi)nesnem.birebirKopyala();
	nesnem2.setBizimIsmimiz("Mehmet Ethem");
	nesnem2.ortakBilgileriYaz();
	System.out.println("Ikinci nesne tcNo:"+nesnem2.hashCode());
	}  }

Orj kod:http://www.ethemsulan.pastebin.com/7dbSedSi

package www.ethemsulan.com;
public class Kisi extends OrtakKisiBilgileri {
public Kisi(String buyukDede, String dede, String baba,
		String bizimSoyIsmimiz) {
super(buyukDede, dede, baba, bizimSoyIsmimiz);
	}
private String birinciKisiIsmi;
public String getBirinciKisiIsmi() {
	return super.getBizimIsmimiz();
	}
public void setBirinciKisiIsmi(String birinciKisiIsmi) {
		super.setBizimIsmimiz(bizimIsmimiz);
	}
}

Orj kod:http://www.ethemsulan.pastebin.com/Dzt5vZ0c

package www.ethemsulan.com;
public class OrtakKisiBilgileri extends SoyAgaci {
public OrtakKisiBilgileri(String buyukDede,
String dede, String baba,String bizimSoyIsmimiz) {
		super();
		setBuyukDede(buyukDede);
		setDede(dede);
		setBaba(baba);
setBizimSoyIsmimiz(bizimSoyIsmimiz);
	}
}

Orj kod:http://www.ethemsulan.pastebin.com/Tt1z59L2

package www.ethemsulan.com;
public abstract class SoyAgaci implements Cloneable{
	private String buyukDede;
	private String dede;
	private String baba;
	private String bizimSoyIsmimiz;
	protected String bizimIsmimiz;
	public String getBizimIsmimiz() {
		return bizimIsmimiz;
	}
public void setBizimIsmimiz(String bizimIsmimiz) {
		this.bizimIsmimiz = bizimIsmimiz;
	}
public String getBizimSoyIsmimiz() {
		return bizimSoyIsmimiz;
	}
public void setBizimSoyIsmimiz(String bizimSoyIsmimiz) {
		this.bizimSoyIsmimiz = bizimSoyIsmimiz;
	}
	//Java'da en üstte obje bulunur.Her şey objeden türer.
//super üst sınıftaki metodu çağırır.
public Object birebirKopyala()throws CloneNotSupportedException{
		return (Object)super.clone();	
	}
	public String getBuyukDede() {
		return buyukDede;
	}
	public void setBuyukDede(String buyukDede) {
		this.buyukDede = buyukDede;
	}
	public String getDede() {
		return dede;
	}
	public void setDede(String dede) {
		this.dede = dede;
	}
	public String getBaba() {
		return baba;
	}
	public void setBaba(String baba) {
		this.baba = baba;
	}
	
	public void ortakBilgileriYaz(){
		System.out.println("Buyuk dede:"+getBuyukDede());
		System.out.println("Dede:"+getDede());
		System.out.println("Baba:"+getBaba());
		System.out.println("Sizin isminiz: "+getBizimIsmimiz());
		System.out.println("Aile soyadı:"+getBizimSoyIsmimiz());
	}   }

Orj kod:http://www.ethemsulan.pastebin.com/YxhYZ4wV

Write a Comment

Let me know what you think?