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

Ağaç Yapısı ( Composite ) Tasarım Deseni

Bu tasarım deseninin amacı, nesneleri ağaç yapısına göre düzenleyerek, ağaç yapısındaki alt üst ilişkisini kurmaktır. Bu tasarım desenine göre, ağaç yapısındaki üst ve alt nesneler aynı arayüz sınıfından türeyerek, birbirlerine benzerler. Yani istemci, yaprak nesneye de üst nesneye de aynı şekilde davranır. Böylece hiyerarşiyi ifade etmek ve hiyerarşi üzerinde işlem yapmak kolaylaşır. Hiyerarşiye yeni nesneler eklemek de kolay hale gelir.

Örnek Uygulama

Bir şirketteki ekip üyesi ve ekip yöneticisi şeklinde iki tip çalışan vardır. Bir ekip yöneticisine birden fazla diğer ekip yöneticileri veya ekip üyeleri bağlı olabilir. Hem EkipÜyesi, hem de EkipYöneticisi sınıfları İşçi sınıfından türemektedir. Ayrıca EkipYöneticisi sınıfına da listeyle n kadar İşçi sınıfı bağlanabilmektedir. İşçi sınıfı hem yönetici, hem de üye olduğu için ağaç yapısıyla istenen nesne bağlanabilektedir. Örnekte İşçi sınıfının bilgileri gösterilmektedir. Hiyerarşinin en üstünde baş yönetici isminde bir ekip yönetici sınıfı vardır. Bu nesnenin bilgi gösterme yordamı çağrıldığında, hiyerarşideki tüm sınıfların bilgi gösterme yordamları ağaç yapısı tasarım deseni sayesinde çalışmaktadı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.composite;

/**
* İşçi.java
*
* Tarih bilgisi : May 23, 2014
*/
public interface İşçi {

 
void bilgiYazdı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.composite;

/**
* EkipÜyesi.java
*
* Tarih bilgisi : May 23, 2014
*/
public class EkipÜyesi implements İşçi {

 
private final String  isim;
 
private final String  maaş;

 
public EkipÜyesi( final String isim, final String maaş ) {
   
this.isim = isim;
   
this.maaş = maaş;
 
}

 
@Override
 
public void bilgiYazdır() {
   
System.out.println( "İsim: " + isim + ", Maaş: " + maaş );
 
}
}
/**
*
@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.composite;

import java.util.ArrayList;
import java.util.List;

/**
* EkipYöneticisi.java
*
* Tarih bilgisi : May 23, 2014
*/
public class EkipYöneticisi implements İşçi {

 
private final List< İşçi >  ekipÜyeleri  = new ArrayList< İşçi >();

 
@Override
 
public void bilgiYazdır() {
   
for ( final İşçi ekipÜyesi : ekipÜyeleri ) {
     
ekipÜyesi.bilgiYazdır();
   
}
  }

 
public void ekipÜyesiEkle( final İşçi işçi ) {
   
ekipÜyeleri.add( işçi );
 
}

 
public void ekipÜyesiÇıkar( final İşçi işçi ) {
   
ekipÜyeleri.remove( işç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.composite;

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

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

   
// Örnek bir hiyerarşi yaratılıyor.
   
final EkipÜyesi ekipÜyesi1 = new EkipÜyesi( "Turan", "1000 lira" );
   
final EkipÜyesi ekipÜyesi2 = new EkipÜyesi( "Ali", "700 lira" );
   
final EkipÜyesi ekipÜyesi3 = new EkipÜyesi( "Kemal", "1750 lira" );
   
final EkipÜyesi ekipÜyesi4 = new EkipÜyesi( "Veli", "1050 lira" );
   
final EkipÜyesi ekipÜyesi5 = new EkipÜyesi( "Aslan", "1400 lira" );

   
final EkipYöneticisi yönetici1 = new EkipYöneticisi();
   
final EkipYöneticisi yönetici2 = new EkipYöneticisi();
   
final EkipYöneticisi başYönetici = new EkipYöneticisi();

    yönetici1.ekipÜyesiEkle
( ekipÜyesi1 );
    yönetici1.ekipÜyesiEkle
( ekipÜyesi4 );
    yönetici1.ekipÜyesiEkle
( ekipÜyesi5 );

    yönetici2.ekipÜyesiEkle
( ekipÜyesi2 );
    yönetici2.ekipÜyesiEkle
( ekipÜyesi3 );

    başYönetici.ekipÜyesiEkle
( yönetici1 );
    başYönetici.ekipÜyesiEkle
( yönetici2 );

   
// Ağaç yapısı üzerinde dolaşarak,
    // tüm işçilerin bilgileri yazılır.
   
başYönetici.bilgiYazdır();
 
}
}
İsim: Turan, Maaş: 1000 lira
İsim: Veli, Maaş: 1050 lira
İsim: Aslan, Maaş: 1400 lira
İsim: Ali, Maaş: 700 lira
İsim: Kemal, Maaş: 1750 lira

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