Tasarım Desenleri
Nesneye Dayalı Programlamada Sınıf İlişkileri Nasıl Olmalı?
Testçiler sizin düşmanınız değildir. Esas düşman yazılım hatalarıdır!
Yaratıcı Tasarım Desenleri

Kopya Nesne ( Prototype ) Tasarım Deseni

Var olan bir nesneden, kopyalama yöntemi ile yeni nesne yaratmak için bu tasarım deseni kullanılır. Nesne yaratmak için "new" operatörü kullanılmaz. Yazılım dillerindeki "clone" gibi, nesne kopyalama yordamlarından faydalanılır. Örneğin java programlama dilinde, bir nesnenin kopyalanabilmesi için, nesnenin "Cloneable" arayüzünden türemiş olması gereklidir.

Bazı nesneler çok büyük olup, çok kaynak harcıyor olabilir. Bu nesnelerin yeniden yaratılması yerine, kolonlanması performans ve kaynak kullanımı açısından tasarruf edilmesine yarar. Bu durumlarda "Kopya Nesne" tasarım deseni kullanılabilir.

Örnek Uygulama

Örnekte, kopyalanabilme özelliğine sahip ( Java Cloneable arayüzünden türemiş ) bir Resim sınıfı bulunmaktadır. Bu sınıfın renk, boy, en gibi sınıf değişkenleri bulunmakta ve bir de kopyasının alınmasına yarayan ve dışarıdan çağırılabilen ( public ) bir "kopyaAl" yordamı vardır. İstemci sınıf ( ResimÜretici ) bu yordam ile sınıfın kopyasını oluşturabilmektedir.

/**
*
@author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/

package com.ilkerkonar.td.desen.ornekkodlar.prototype;

/**
* Resim.java
*
* Tarih bilgisi : May 11, 2014
*/
public class Resim implements Cloneable {

 
private final String  renk;
 
private final Integer  boy;
 
private final Integer  en;

 
public Resim( final String renk, final Integer boy, final Integer en ) {
   
this.renk = renk;
   
this.boy = boy;
   
this.en = en;
 
}

 
protected Resim kopyaAl() {

   
try {
     
// Resim nesnesi kopyalanıyor.
     
return ( Resim ) super.clone();
   
} catch ( final CloneNotSupportedException e ) {

     
e.printStackTrace();

     
return null;
   
}
  }

 
public String renkAl() {
   
return renk;
 
}

 
public Integer boyAl() {
   
return boy;
 
}

 
public Integer enAl() {
   
return en;
 
}

 
@Override
 
public String toString() {
   
return "Resim [renk=" + renk + ", boy=" + boy + ", en=" + en + "]";
 
}
}
/**
*
@author İlker KONAR, Yazılım Kıdemli Uzmanı.
*
* Tasarım Desenleri Sitesi Kodları. Dikkat: Her hakkı saklıdır.
*/



package com.ilkerkonar.td.desen.ornekkodlar.prototype;

/**
* ResimÜretici.java
*
* Tarih bilgisi : May 11, 2014
*/
public class ResimÜretici {

 
/**
   *
@param args
   */
 
public static void main( final String[] args ) {

   
// Resim nesnesi üretiliyor.
   
final Resim resim1 = new Resim( "mavi", 25, 15 );

   
// Yeniden resim nesnesi üretmek yerine,
    // var olan resim nesnesinden kopyalama yapılıyor.
   
final Resim resim2 = resim1.kopyaAl();

   
// Kopyalanan resim nesnesinin özellikleri yazılıyor.
   
System.out.println( "Kopyalanan resim nesnesi : " + resim2 );
 
}
}
Kopyalanan resim nesnesi : Resim [renk=mavi, boy=25, en=15]

Yorumlar

Henüz bu sayfa için bir yorum yapılmamıştır.

Yorum Yaz, Düşüncelerini Paylaş

Not: Zorunlu alanlar yıldız (*) ile belirtilmiştir.

Kişisel Bilgiler

E-posta adresiniz kimse ile paylaşılmayacaktır. Gerekli olduğunda sizinle iletişim sağlamak için kullanılacaktır.

Yorum Alanı
Giriş Kontrol


Tüm java kodları "jdk1.7.0_09" ile derlenmiş ve çalıştırılmıştır.

Tüm hakları saklıdır. ©  "İlker KONAR" | İletişim: bilgi@tasarimdesenleri.com