Behavior Design Pattern: Command

Command adalah behavioral design pattern yang mengubah requests atau operasi menjadi objects.

Mari kita gunakan skenario menyalakan TV, terdapat 2 cara yaitu:

  • Tombol ON pada remote.
  • Tombol ON padai TV.


Kita implementasikan objek command ON dengan TV sebagai penerima. Saat metode dipanggil, akan memanggil fungsi TV.on.

Kemudian definisikan invoker. Terdapat dua invoker: remote dan TV. Keduanya akan menggunakan objek command ON.

Perhatikan bagaimana request yang sama di wrapped kedalam invoker yang berbeda. Cara yang sama dapat kita lakukan pada command yang lain. Keuntungan dari pemisahan object command adalah pemisahan UI logic dari business logic.

Tidak diperlukan untuk membuat handler berbeda untuk setiap invokers. Pada Command object sudah tersedia semua informasi yang dibutuhkan.

Berikut contoh implementasi pattern command dalam golang.

package main

import "fmt"

//invoker
type button struct {
	command command
}

func (b *button) press() {
	b.command.execute()
}

//command interface
type command interface {
	execute()
}

//concrete command
type onCommand struct {
	device device
}

func (c *onCommand) execute() {
	c.device.on()
}

type offCommand struct {
	device device
}

func (c *offCommand) execute() {
	c.device.off()
}

//receiver interface
type device interface {
	on()
	off()
}

//concrete reciever
type tv struct {
	isRunning bool
}

func (t *tv) on() {
	t.isRunning = true
	fmt.Println("Turning tv on")
}

func (t *tv) off() {
	t.isRunning = false
	fmt.Println("Turning tv off")
}

func main() {
	tv := &tv{}

	onCommand := &onCommand{
		device: tv,
	}

	offCommand := &offCommand{
		device: tv,
	}

	onButton := &button{
		command: onCommand,
	}
	onButton.press()

	offButton := &button{
		command: offCommand,
	}
	offButton.press()
}
Turning tv on
Turning tv off

Sharing is caring:

Leave a Comment