Ağaç Yapısı
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 :
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.
Örnek Sınıf Çizelgesi :
Örnek Java Kodu : ( Kodlar java 1.6.0.7 ile derlenip, çalıştırılmıştır. )
İşçi.java :
public interface İşçi {
void bilgiYazdır();
}
EkipÜyesi.java :
public class EkipÜyesi implements İşçi {
private String isim;
private String maaş;
public EkipÜyesi( String isim, String maaş ) {
this.isim = isim;
this.maaş = maaş;
}
@Override
public void bilgiYazdır() {
System.out.println( "İsim: " + isim + "Maaş: " + maaş );
}
}
EkipYöneticisi.java :
import java.util.ArrayList;
import java.util.List;
public class EkipYöneticisi implements İşçi {
private List<İşçi> ekipÜyeleri = new ArrayList<İşçi>();
@Override
public void bilgiYazdır() {
for ( İşçi ekipÜyesi : ekipÜyeleri ) {
ekipÜyesi.bilgiYazdır();
}
}
public void ekipÜyesiEkle( İşçi işçi ) {
ekipÜyeleri.add( işçi );
}
public void ekipÜyesiÇıkar( İşçi işçi ) {
ekipÜyeleri.remove( işçi );
}
}
Şirket.java :
public class Şirket {
public static void main(String[] args) {
EkipÜyesi ekipÜyesi1 = new EkipÜyesi( "turan", "1000 lira" );
EkipÜyesi ekipÜyesi2 = new EkipÜyesi( "ali", "1200 lira" );
EkipÜyesi ekipÜyesi3 = new EkipÜyesi( "hasan", "750 lira" );
EkipÜyesi ekipÜyesi4 = new EkipÜyesi( "veli", "1050 lira" );
EkipÜyesi ekipÜyesi5 = new EkipÜyesi( "aslan", "1400 lira" );
EkipYöneticisi yönetici1 = new EkipYöneticisi();
EkipYöneticisi yönetici2 = new EkipYöneticisi();
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();
}
}