1.1 Definisi dan Konsep

Pola perintah adalah pola desain perilaku yang memungkinkan enkapsulasi permintaan sebagai objek, sehingga Anda dapat memparameterkan klien dengan permintaan yang berbeda.

1.2 Tujuan Pola Perintah

Tujuan utama dari pola perintah adalah untuk memisahkan pengirim dan penerima. Dengan mengenkapsulasi permintaan ke dalam sebuah objek, pengirim hanya perlu berinteraksi dengan objek perintah, tanpa berinteraksi langsung dengan penerima.

2. Karakteristik dan Keunggulan Pola Perintah

Pola perintah memiliki karakteristik dan keunggulan sebagai berikut:

  • Mengenkapsulasi permintaan ke dalam sebuah objek memisahkan pengirim dan penerima.
  • Dapat mengantri permintaan, mencatat log, dan melakukan operasi undo.
  • Perintah baru dapat diperluas tanpa mengubah kode asli.

3. Contoh Aplikasi Praktis dari Pola Perintah

Pola perintah dapat diterapkan dalam skenario berikut:

  • Membutuhkan pemisahan permintaan dari objek yang melakukan perintah.
  • Mendukung operasi undo dan redo.
  • Menjalankan serangkaian operasi secara berurutan.

4.1 Diagram Kelas UML

Pola Perintah Golang

4.2 Pengantar Contoh

Pada contoh ini, kita akan membuat implementasi sederhana dari pola perintah. Misalkan kita memiliki TV sebagai penerima, yang mampu melakukan tindakan menyalakan dan mematikan. Kita juga memiliki pengontrol jarak jauh sebagai panggil, yang dapat menetapkan perintah tertentu dan mengeksekusinya.

4.3.1 Mendefinisikan Antarmuka Perintah

type ICommand interface {
    Execute()
}

4.3.2 Mengimplementasikan Kelas Perintah Konkrit

type ConcreteCommand struct {
    receiver IReceiver
}

func (c *ConcreteCommand) Execute() {
    c.receiver.Action()
}

4.3.3 Mendefinisikan Antarmuka Penerima

type IReceiver interface {
    Action()
}

4.3.4 Mengimplementasikan Kelas Penerima Konkrit

type Receiver struct {}

func (r *Receiver) Action() {
    fmt.Println("Melakukan tindakan")
}

4.3.5 Mengimplementasikan Peran Panggil

type Invoker struct {
    command ICommand
}

func (i *Invoker) SetCommand(command ICommand) {
    i.command = command
}

func (i *Invoker) ExecuteCommand() {
    i.command.Execute()
}

4.3.6 Contoh Kode Klien

func main() {
    receiver := &Receiver{}
    command := &ConcreteCommand{receiver: receiver}
    invoker := &Invoker{}
    invoker.SetCommand(command)
    invoker.ExecuteCommand()
}

5. Perbedaan Antara Pola Perintah dan Pola Strategi

Pola perintah dan pola strategi mirip dalam beberapa hal, karena keduanya mengenkapsulasi perilaku tertentu ke dalam objek. Perbedaannya terletak pada pola perintah yang digunakan untuk mengenkapsulasi permintaan sebagai objek dan mengimplementasikan fungsi seperti antrian undo dan execute, sementara pola strategi digunakan untuk mengenkapsulasi serangkaian algoritma dan memilih secara dinamis satu algoritma untuk dieksekusi saat runtime.

Pola perintah lebih cocok untuk operasi seperti logging dan akuntansi, sementara pola strategi lebih cocok untuk perubahan fleksibel dalam logika bisnis.