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!
Davranışsal Tasarım Desenleri

Ziyaretçi ( Visitor ) Tasarım Deseni

Bu tasarım deseni, çok sayıda ve farklı tipteki nesneler üzerinde işlem yapabilmek amacıyla kullanılır. İşlem yapılacak nesnelerde herhangi bir değişiklik yapılmaz. İşlemi ziyaretçi nesneleri yapar. Eğer sisteme yeni nesneler eklenmiyor, fakat sık sık yeni işlemlerin eklenmesi gerekiyorsa bu tasarım deseni kullanılabilir. Bu tasarım deseninin kullanılmasıyla, yapılacak işlemle ilgili kodların merkezi bir nesnede toplanır.

Örnek Uygulama

Bu örnekte, bir şirkette çalışan Personel hiyerarşisi bulunmaktadır. Bu hiyerarşide, İşçi ve Yönetici alt sınıfları vardır. Bu sınıf hiyerarşisinde farklı işlemler yapabilmek için ziyaretçi tasarım deseni kullanılacaktır. Bu işlemler maaş hesaplama ve çalışma saatlerini düzenleme işlemleridir. Bunun için PersonelZiyaretçisi üst sınıfı yaratılır. Farklı tipteki maaş hesaplama ve çalışma saati hesaplama işlemleri için de MaaşHesaplamaZiyaretçisi ve ÇalışmaPlanıZiyaretçisi alt sınıfları yani ziyaretçi sınıfları oluşturulur. Bu ziyaretçi sınıfları işçi ve yönetici sınıfları üzerinde çeşitli işlemler yapabilirler. Sistemi deneyen Şirket istemci sınıfı da örnekte yer alır.

/**
*
@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.visitor;

/**
* Personel.java
*
* Tarih bilgisi : May 24, 2014
*/
public interface Personel {

 
void kabulEt( PersonelZiyaretçisi ziyaretçi );
}
/**
*
@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.visitor;

/**
* İşçi.java
*
* Tarih bilgisi : May 24, 2014
*/
public class İşçi implements Personel {

 
@Override
 
public void kabulEt( final PersonelZiyaretçisi ziyaretçi ) {
   
ziyaretçi.ziyaretEt( this );
 
}
}
/**
*
@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.visitor;

/**
* Yönetici.java
*
* Tarih bilgisi : May 24, 2014
*/
public class Yönetici implements Personel {

 
@Override
 
public void kabulEt( final PersonelZiyaretçisi ziyaretçi ) {
   
ziyaretçi.ziyaretEt( this );
 
}
}
/**
*
@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.visitor;

/**
* PersonelZiyaretçisi.java
*
* Tarih bilgisi : May 24, 2014
*/
public interface PersonelZiyaretçisi {

 
void ziyaretEt( İşçi işçi );

 
void ziyaretEt( Yönetici yönetici );
}
/**
*
@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.visitor;

/**
* MaaşHesaplamaZiyaretçisi.java
*
* Tarih bilgisi : May 24, 2014
*/
public class MaaşHesaplamaZiyaretçisi implements PersonelZiyaretçisi {

 
@Override
 
public void ziyaretEt( final İşçi işçi ) {
   
System.out.println( "İşçi maaşı hesaplandı." );
 
}

 
@Override
 
public void ziyaretEt( final Yönetici yönetici ) {
   
System.out.println( "Yönetici maaşı hesaplandı." );
 
}
}
/**
*
@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.visitor;

/**
* ÇalışmaPlanıZiyaretçisi.java
*
* Tarih bilgisi : May 24, 2014
*/
public class ÇalışmaPlanıZiyaretçisi implements PersonelZiyaretçisi {

 
@Override
 
public void ziyaretEt( final İşçi işçi ) {
   
System.out.println( "İşçi çalışma saatleri hesaplandı." );
 
}

 
@Override
 
public void ziyaretEt( final Yönetici yönetici ) {
   
System.out.println( "Yönetici çalışma saatleri hesaplandı." );
 
}
}
/**
*
@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.visitor;

/**
* Şirket.java
*
* Tarih bilgisi : May 24, 2014
*/
public class Şirket {

  
public static void main( final String[] args ) {

     
// Personel nesnelerini oluştur.
     
final İşçi işçi = new İşçi();
     
final Yönetici yönetici = new Yönetici();

     
// Ziyaretçi nesnelerini oluştur.
     
final PersonelZiyaretçisi maaşHesaplamaZiyaretçisi = new MaaşHesaplamaZiyaretçisi();
     
final PersonelZiyaretçisi çalışmaPlanıZiyaretçisi = new ÇalışmaPlanıZiyaretçisi();

     
// Maaş Hesaplama işlemlerini yap.
     
işçi.kabulEt( maaşHesaplamaZiyaretçisi );
      yönetici.kabulEt
( maaşHesaplamaZiyaretçisi );

     
// Çalışma Planı işlemlerini yap.
     
işçi.kabulEt( çalışmaPlanıZiyaretçisi );
      yönetici.kabulEt
( çalışmaPlanıZiyaretçisi );
  
}
}
İşçi maaşı hesaplandı.
Yönetici maaşı hesaplandı.
İşçi çalışma saatleri hesaplandı.
Yönetici çalışma saatleri hesaplandı.

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