1.1 Tanım ve Kavram
Komut deseni, bir isteği bir nesne olarak kapsüllemeyi sağlayan davranışsal bir tasarım desenidir, böylece istemciyi farklı isteklerle parametrelendirebilirsiniz.
1.2 Komut Deseninin Amacı
Komut deseninin temel amacı, gönderici ve alıcıyı ayırmaktır. İsteği bir nesne içinde kapsülleyerek, göndericinin doğrudan alıcı ile etkileşime girmek yerine sadece komut nesnesi ile etkileşimde bulunması gerekir.
2. Komut Deseninin Karakteristikleri ve Avantajları
Komut deseninin aşağıdaki özellikleri ve avantajları bulunmaktadır:
- İsteği bir nesneye kapsülleme, gönderici ve alıcıyı ayırır.
- İstekleri kuyruğa alabilir, kayıt logları tutabilir ve geri alma işlemleri gerçekleştirebilir.
- Orijinal kodu değiştirmeden yeni komutlar genişletilebilir.
3. Komut Deseninin Pratik Uygulama Örnekleri
Komut deseni aşağıdaki senaryolarda uygulanabilir:
- İsteği komutu gerçekleştiren nesneden ayırmak gerektiğinde.
- Geri alma ve yeniden gerçekleştirme işlemlerini desteklemek.
- Bir dizi işlemi kuyruğa alarak gerçekleştirmek.
4.1 UML Sınıf Diyagramı
4.2 Örnek Tanıtımı
Bu örnekte, komut deseninin basit bir uygulamasını oluşturacağız. Diyelim ki alıcı olarak TV'yi ve açma ve kapatma gibi işlemleri gerçekleştirebilen bir uzaktan kumandayı içeren bir sistemimiz var.
4.3.1 Komut Arayüzünü Tanımlayın
type ICommand interface {
Execute()
}
4.3.2 Somut Komut Sınıfını Uygulayın
type ConcreteCommand struct {
receiver IReceiver
}
func (c *ConcreteCommand) Execute() {
c.receiver.Action()
}
4.3.3 Alıcı Arayüzünü Tanımlayın
type IReceiver interface {
Action()
}
4.3.4 Somut Alıcı Sınıfını Uygulayın
type Receiver struct {}
func (r *Receiver) Action() {
fmt.Println("İşlem gerçekleştiriliyor")
}
4.3.5 Çağrıcı Rolünü Uygulayın
type Invoker struct {
command ICommand
}
func (i *Invoker) SetCommand(command ICommand) {
i.command = command
}
func (i *Invoker) ExecuteCommand() {
i.command.Execute()
}
4.3.6 İstemci Kodu Örneği
func main() {
receiver := &Receiver{}
command := &ConcreteCommand{receiver: receiver}
invoker := &Invoker{}
invoker.SetCommand(command)
invoker.ExecuteCommand()
}
5. Komut Deseni ve Strateji Deseni Arasındaki Fark
Komut deseni ve strateji deseni, belirli davranışları nesnelere kapsüllerken benzerdir. Farklılık, komut deseninin genellikle istekleri nesneler olarak kapsüllendirip geri alma ve execute kuyrukları gibi işlevleri uygularken, strateji deseninin genellikle bir dizi algoritmayı kapsülleyip çalışma zamanında bir algoritmayı dinamik olarak seçmeye odaklanmasıdır.
Komut deseni, genellikle logging ve muhasebe gibi işlemler için daha uygunken, strateji deseni, iş mantığında esnek değişiklikler için daha uygun olmaktadır.