Komut

Bu tasarım deseninde, nesneler bir işlevi ve bu işlev için gerekli değiştirgeleri içerirler. Dışarıdan bu nesneler tetiklenerek bazı işlemler gerçekleştirilir. Bu tasarım deseniyle, işlemi tetikleyecek nesneler ile işlemi yapan nesneler birbirlerinden ayrılmış olur. İşlemi yapacak nesneler birden fazla olabilir ve bunlar koleksiyonlarda saklanabilir. Bu nesnelerin hepsi birden sırayla çalıştırılabilir, böylece istenen fonksiyon, birden fazla işlevin çalışmasıyla gerçekleştirilmiş olur. Yeni işlevler istendiğinde, yeni komut nesneleri de kolayca eklenebilir.

Örnek :

Lambaya açma/kapatma işlevi verecek düğme sistemi komut tasarım deseniyle örneklenmiştir. Komut, tasarım desenindeki üst sınıftır. Bu arayüz sınıfı gerçekleştirecek, LambaAçmaKomutu ve LambaKapatmaKomut sınıfları bulunmaktadır. Bu komutlar lambaya gerekli komutu verecek komut sınıflarıdır. Bu sınıflar bir de Lamba nesnesini içermektedir. LambaDüğmesi sınıfı ise, komutları çağıracak, çağırıcı sınıftır. Bu yüzden komut sınıflarını içerir. Örnekte bir de bu tasarım desenini sınayacak olan istemci durumundaki Kullanıcı sınıfı vardır.

Örnek Sınıf Çizelgesi :

Örnek Java Kodu : ( Kodlar java 1.6.0.7 ile derlenip, çalıştırılmıştır. )

Lamba.java :

public class Lamba {


public void aç() {

System.out.println( "Lamba açıldı." );

}


public void kapat() {

System.out.println( "Lamba kapatıldı." );

}

}

Komut.java :

public interface Komut {

void çalıştır();

}

LambaAçmaKomutu.java :

public class LambaAçmaKomutu implements Komut {

private Lamba lamba;


public LambaAçmaKomutu( Lamba lamba ) {

this.lamba = lamba;

}


@Override

public void çalıştır() {

lamba.aç();

}

}

LambaKapatmaKomutu.java :

public class LambaKapatmaKomutu implements Komut {

private Lamba lamba;


public LambaKapatmaKomutu( Lamba lamba ) {

this.lamba = lamba;

}


@Override

public void çalıştır() {

lamba.kapat();

}

}

LambaDüğmesi.java :

public class LambaDüğmesi {

private Komut açmaKomutu;

private Komut kapatmaKomutu;


public LambaDüğmesi( Komut açmaKomutu, Komut kapatmaKomutu ) {

this.açmaKomutu = açmaKomutu;

this.kapatmaKomutu = kapatmaKomutu;

}


public void lambaAç() {

açmaKomutu.çalıştır();

}


public void lambaKapat() {

kapatmaKomutu.çalıştır();

}

}

Kullanıcı.java :

public class Kullanıcı {


public static void main(String[] args) {

Lamba lamba = new Lamba();

LambaAçmaKomutu açKomutu = new LambaAçmaKomutu( lamba );

LambaKapatmaKomutu kapatKomutu =

new LambaKapatmaKomutu( lamba );

LambaDüğmesi düğme =

new LambaDüğmesi( açKomutu, kapatKomutu );


düğme.lambaAç();

düğme.lambaKapat();

}

}