Java Tasarım Desenleri : Prototype Pattern | Design Pattern
Prototype Pattern
Prototype Pattern ile ilgili ders içeriğine aşağıdaki adresten ulaşabilirsiniz.
Prototype Pattern, yaratımsal bir tasarım desenidir ve bir nesnenin kopyasını oluşturmak için kullanılır. Bu desen, bir nesnenin prototipini kullanarak yeni nesnelerin oluşturulmasını sağlar, bu sayede nesne oluşturma işlemi daha esnek hale gelir.
Temel Bileşenler
- Prototype (Prototip): Bu, nesnenin kopyasını oluşturmak için soyut bir arayüz sağlar.
- Concrete Prototype (Somut Prototip): Bu, Prototype arayüzünü uygular ve kendi kopyasını oluşturacak metodu içerir.
- Client (İstemci): Bu, yeni nesnelerin kopyalarını oluşturan ve kullanımını sağlayan istemci kodu.
Amaç
Prototype Pattern’in amacı, bir nesnenin kopyasını oluşturmak için bir prototip kullanarak nesne oluşturma işlemini soyutlamaktır. Bu sayede, nesne oluşturma işlemi daha dinamik ve esnek hale gelir, çünkü yeni nesneler, var olan nesnelerin kopyalarıyla aynı özelliklere sahip olur.
Avantajlar
- Esneklik: Prototype Pattern, nesne oluşturma işlemini soyutlayarak kodun daha esnek olmasını sağlar.
- Performans: Var olan bir nesnenin kopyası oluşturmak, yeni bir nesne oluşturmaktan daha hızlı ve verimlidir.
- Modülerlik: Prototype Pattern, nesne oluşturma işlemini somut sınıflardan ayırarak kodun daha modüler olmasını sağlar.
Prototype Pattern, nesne oluşturma işlemini soyutlayarak kodun daha esnek, performanslı ve modüler olmasını sağlar.
Kod Örnekleri:
public class Iletisim implements Cloneable{
private String ceptel;
private String email;
public Iletisim(String ceptel, String email) throws InterruptedException {
Thread.sleep(3000);
this.ceptel = ceptel;
this.email = email;
}
public String getCeptel() {
return ceptel;
}
public void setCeptel(String ceptel) {
this.ceptel = ceptel;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Iletisim{" +
"ceptel='" + ceptel + '\'' +
", email='" + email + '\'' +
'}';
}
@Override
protected Iletisim clone() throws CloneNotSupportedException {
return (Iletisim) super.clone();
}
}
public class Kisi implements Cloneable{
private String ad;
private String soyad;
private long yas;
private Iletisim iletisim;
public Kisi(String ad, String soyad, long yas, Iletisim iletisim) throws InterruptedException {
Thread.sleep(1000);
this.ad = ad;
this.soyad = soyad;
this.yas = yas;
this.iletisim = iletisim;
}
public String getAd() {
return ad;
}
public void setAd(String ad) {
this.ad = ad;
}
public String getSoyad() {
return soyad;
}
public void setSoyad(String soyad) {
this.soyad = soyad;
}
public long getYas() {
return yas;
}
public void setYas(long yas) {
this.yas = yas;
}
public Iletisim getIletisim() {
return iletisim;
}
public void setIletisim(Iletisim iletisim) {
this.iletisim = iletisim;
}
@Override
public String toString() {
return "Kisi{" +
"ad='" + ad + '\'' +
", soyad='" + soyad + '\'' +
", yas=" + yas +
", iletisim=" + iletisim +
'}';
}
@Override
protected Kisi clone() throws CloneNotSupportedException {
Kisi kisi = (Kisi) super.clone();
kisi.setIletisim(iletisim.clone());
return (Kisi)super.clone();
}
}
public class Main {
public static void main(String[] args) throws InterruptedException {
long now = System.currentTimeMillis();
Iletisim iletisim = new Iletisim("-", "-");
Kisi kisi = new Kisi("-", "-", 0, iletisim);
long end = System.currentTimeMillis();
System.out.println(kisi);
sureHesapla(now, end);
System.out.println("-------------------");
long nowUmit = System.currentTimeMillis();
Iletisim iletisimUmit = new Iletisim("55", "umiitkose@gmail.com");
Kisi umit = new Kisi("Ümit", "KÖSE", 31, iletisimUmit);
long endUmit = System.currentTimeMillis();
System.out.println(umit);
sureHesapla(nowUmit, endUmit);
System.out.println("-------------------");
long nowOrhan = System.currentTimeMillis();
Kisi kisiOrhan;
Iletisim iletisimOrhan;
try {
kisiOrhan = kisi.clone();
iletisimOrhan = iletisim.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
kisiOrhan.setAd("Orhan");
kisiOrhan.setSoyad("KÖSE");
kisiOrhan.setYas(60);
iletisimOrhan.setEmail("orhankose");
iletisimOrhan.setCeptel("22");
kisiOrhan.setIletisim(iletisimOrhan);
iletisim.setCeptel("5");
System.out.println(kisiOrhan);
long endOrhan = System.currentTimeMillis();
sureHesapla(nowOrhan,endOrhan);
}
private static void sureHesapla(Long now, Long end) {
System.out.println("Geçen Süre " + ((end - now) / 1000) + " sn'dir.");
}
}




