Kalıp Yordam
Kalıp yordam, sınıf hiyerarşisinde üst sınıfta yer alır. Bu yordam gerekli yöntemin adımlarını belirler. Bu yöntemin hangi adımlardan oluşması gerektiğini ortaya koyarken, alt sınıfların uyması gereken şablonu ortaya koyar. Alt sınıflar detayları kendileri belirler. Fakat uyulması gereken yapı üst sınıf tarafından, kalıp yordam ile belirlenir. Bu tasarım deseni sayesinde alt sınıflarda yapılacak kod tekrarlarından kaçınılır. Alt sınıfların ortak kodları üst sınıfta tek bir yerde toplanır. Bu ortak kısımda bir değişikliğe ihtiyaç duyulduğunda, bu tek noktada yapılır. Kısaca üst sınıfta yer alan kalıp yordam, tüm alt sınıfların ihtiyaç duyduğu ortak adımları barındırır, bunlar için bir kalıp oluşturur ve detayları alt sınıflara bırakır.
Örnek :
Örnek olarak bir yemek şirketinin sistemi kurulmaktadır. Görevi yemek yapmak olan bu sistemdeki tüm yemeklerin, ilk önce malzemeleri hazırlanır, sonra pişirilir ve en son da servisleri yapılmaktadır. Bu adımlar ortak olduğu ve yemekler bazında detaylandığı için YemekYapıcı isminde bir üst sınıf oluşturulmuş ve bu ortak adımlar, "yemekYap" ismindeki bir kalıp yordamda toplanmıştır. Bu kalıp yordam diğer adım için gerekli yordamları çağırmıştır. Bu yordamlar soyut yapılmış ve bu sınıftan türeyen alt sınıflarda gerçekleştirilmeleri beklenmiştir. Sistemi kullanan YemekŞirketi sınıfı ise yemekleri bir dizi de toplamıştır. Dizi elemanı olarak da PilavYapıcı ve ÇorbaYapıcı alt sınıflarını vermiştir. Daha sonra dizi elemanlarının yemekYap "kalıp yordam" yordamlarını çağırarak, sistemi çalıştırmıştır.
Örnek Sınıf Çizelgesi :
Örnek Java Kodu : ( Kodlar java 1.6.0.7 ile derlenip, çalıştırılmıştır. )
YemekYapıcı.java :
public abstract class YemekYapıcı {
public void yemekYap() {
malzemeleriHazırla();
pişir();
servisYap();
}
protected abstract void malzemeleriHazırla();
protected abstract void pişir();
protected abstract void servisYap();
}
PilavYapıcı.java :
public class PilavYapıcı extends YemekYapıcı {
@Override
protected void malzemeleriHazırla() {
System.out.println( "pilav malzemeleri hazırlandı." );
}
@Override
protected void pişir() {
System.out.println( "pilav pişirildi." );
}
@Override
protected void servisYap() {
System.out.println( "pilav servis yapıldı." );
}
}
ÇorbaYapıcı.java :
public class ÇorbaYapıcı extends YemekYapıcı {
@Override
protected void malzemeleriHazırla() {
System.out.println( "çorba malzemeleri hazırlandı." );
}
@Override
protected void pişir() {
System.out.println( "çorba pişirildi." );
}
@Override
protected void servisYap() {
System.out.println( "çorba servis yapıldı." );
}
}
YemekŞirketi.java :
public class YemekŞirketi {
public static void main(String[] args) {
// Yemek yapıcılar oluşturuldu.
YemekYapıcı[] yemekYapıcılar = new YemekYapıcı[ 2 ];
yemekYapıcılar[ 0 ] = new ÇorbaYapıcı();
yemekYapıcılar[ 1 ] = new PilavYapıcı();
// Yemekler yapıldı.
for ( YemekYapıcı yemekYapıcı : yemekYapıcılar ) {
yemekYapıcı.yemekYap();
}
}
}