Kurulum Nesnesi
Bir nesnenin parça parça, aşama aşama kurulmasını, oluşmasını sağlayan tasarım desenidir. Kurulumu sağlayan kurulum nesneleri birden fazla olabilir ve tek bir genel kurucu üst sınıf altında toplanırlar. Bu kurucu nesnelerden birini değiştirge olarak alan ve kurulumu yöneten bir tane yönetici sınıf bulunur. İstemci belli bir değiştirgeye göre kurucu nesneyi seçer ve bunu yönetici sınıfa geçirir. Sonra da yönetici sınıftan kurulmuş olan ihtiyacı olan nesneyi alır. Desenin işleyişi bu şekildedir. Bu desen bir kurucu tasarım deseni olduğu için, nesne yaratma ve oluşturma sorumluluğunu ilgili desen grubuna verir, ve sistem kurulumun detaylarıyla ilgilenmez. Ayrıca varsayılan değerler de kullanılarak, nesnenin yaratılması basitleşir ve bir düzen içersine girer. Üst sınıf kurulum nesnesinin altına yeni kurulum nesneleri gelebilir ve sistem böylece kolayca genişleyebilir. Bu deseni, ürün olarak gördüğümüz, yaratılacak nesne karmaşık ise ve belli bir düzende aşama aşama oluşması bekleniyorsa kullanabiliriz.
Örnek :
Bu örnekte, pide salonundaki aşçı ürün olarak pide yapacaktır. Pide yapımı, sırayla hamur, malzeme ve baharat koyularak aşama aşama yapılacaktır. Pide yapımı ise lahmacun ve kuşbaşılı pide olmak üzere ikiye ayrılmaktadır. Bu uygulama için kurulum nesnesi tasarım desenini kullanabiliriz. Çünkü ürün olarak seçilen pidenin aşama aşama kurulması ihtiyacı vardır. Bu örnekteki istemci nesne, PideSalonu nesnesidir. Kurulum nesnesini yönetip, kurulumu yapan yönetici nesne ise Aşçıdır. İstemci yani pide salonu istediği kurulum nesnesini yöneticiye(aşçı) değiştirge olarak verir. Daha sonra da yönetici sınıf kurulumu gerçekleştirir. Kurulan ürün olan pide nesnesi ardından yönetici sınıf aracılığı ile alınır.
Örnek Sınıf Çizelgesi :
Örnek Java Kodu : ( Kodlar java 1.6.0.7 ile derlenip, çalıştırılmıştır. )
Pide.java :
public class Pide {
private String malzeme = "";
private String hamur = "";
private String baharat = "";
public void malzemeKoy( String malzeme ) {
this.malzeme = malzeme;
}
public void hamurKoy( String hamur ) {
this.hamur = hamur;
}
public void baharatKoy( String baharat ) {
this.baharat = baharat;
}
}
PideKurucu.java :
public abstract class PideKurucu {
protected Pide pide;
public void pideYarat() {
pide = new Pide();
}
public Pide pideAl() {
return pide;
}
public abstract void malzemeKur();
public abstract void hamurKur();
public abstract void baharatKur();
}
KuşbaşılıPideKurucu.java :
public class KuşbaşılıPideKurucu extends PideKurucu {
@Override
public void baharatKur() {
pide.baharatKoy( "kimyon" );
}
@Override
public void hamurKur() {
pide.hamurKoy( "kalın hamur" );
}
@Override
public void malzemeKur() {
pide.malzemeKoy( "kuşbaşı et" );
}
}
LahmacunPideKurucu.java :
public class LahmacunPideKurucu extends PideKurucu {
@Override
public void baharatKur() {
pide.baharatKoy( "acı biber" );
}
@Override
public void hamurKur() {
pide.hamurKoy( "ince hamur" );
}
@Override
public void malzemeKur() {
pide.malzemeKoy( "kıyma" );
}
}
Aşçı.java :
public class Aşçı {
private PideKurucu pideKurucu;
public void pideKurucuAta( PideKurucu pideKurucu ) {
this.pideKurucu = pideKurucu;
}
public Pide pideAl() {
return pideKurucu.pideAl();
}
public void pideyiKur() {
// Pideyi aşama aşama kur.
pideKurucu.pideYarat();
pideKurucu.hamurKur();
pideKurucu.malzemeKur();
pideKurucu.baharatKur();
}
}
PideSalonu.java :
public class PideSalonu {
public static void main(String[] args) {
// Yönetici sınıfı yarat.
Aşçı aşçı = new Aşçı();
// Kurulum nesnesini yarat.
LahmacunPideKurucu lahmacunPideKurucu = new LahmacunPideKurucu();
// Yönetici sınıfa kurulum nesnesini ver.
aşçı.pideKurucuAta( lahmacunPideKurucu );
// Ürün nesnesini kur.
aşçı.pideyiKur();
// Pide kuruldu ve ürün hazır.
Pide pide = aşçı.pideAl();
System.out.println( "Pide kuruldu." );
}
}