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ı

Golang Komut Deseni

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.