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
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.