1.1 นิยามและแนวคิด

แบบแผนคำสั่ง (command pattern) เป็นแบบแผนทางพฤติกรรมที่อนุญาตให้คลุมเครือข่ายคำร้องขอเป็นอ็อบเจ็กต์ เพื่อที่คุณสามารถกำหนดพารามิเตอร์ให้กับไคลเอนต์ด้วยคำร้องขอที่แตกต่างกัน

1.2 วัตถุประสงค์ของแบบแผนคำสั่ง

วัตถุประสงค์หลักของแบบแผนคำสั่งคือการแยกตัวส่งและผู้รับ โดยการใส่คำร้องขอลงในอ็อบเจ็กต์ ตัวส่งจะต้องมีการจับคู่กับอ็อบเจ็กต์คำสั่งเท่านั้น โดดไม่ต้องมีการจับคู่โดยตรงกับผู้รับ

2. ลักษณะและประโยชน์ของแบบแผนคำสั่ง

แบบแผนคำสั่งมีลักษณะและประโยชน์ดังต่อไปนี้:

  • การใส่คำร้องขอลงในอ็อบเจ็กต์ทำให้ส่งและผู้รับแยกตัว
  • สามารถจัดคิวคำร้องขอ บันทึกบันทึก และดำเนินการเยกเรื่องกลับ
  • สามารถขยายคำสั่งใหม่โดยไม่ต้องเปลี่ยนแปลงโค้ดเดิม

3. ตัวอย่างของการใช้แบบแผนคำสั่งในการปฏิบัติ

แบบแผนคำสั่งนำไปใช้ได้ในสถานการณ์ต่อไปนี้:

  • ต้องการแยกตัวคำขอออกจากอ็อบเจ็กต์ที่ดำเนินการคำสั่ง
  • การสนับสนุนการดำเนินการเยกเรื่องและดำเนินการเรียกคืน
  • การดำเนินการเซ็ตของดำเนินการคำสั่งเรียง

4.1 ไดอะแกรมคลาส UML

แบบแผนคำสั่ง Golang

4.2 การแนะนำตัวอย่าง

ในตัวอย่างนี้ เราจะสร้างการปฏิบัติแบบง่ายของแบบแผนคำสั่ง สมมติว่าเรามีทีวีในฐานะผู้รับ ซึ่งสามารถดำเนินการการเปิดและปิดได้ เรายังมีตัวควบคุมระยะไกลหรือ invoker เป็นผู้ตั้งคำสั่งและดำเนินการให้กับเขา

4.3.1 กำหนดอินเตอร์เฟสเพื่อคำสั่ง

type ICommand interface {
    Execute()
}

4.3.2 การดำเนินการคลาสที่แน่นอน

type ConcreteCommand struct {
    receiver IReceiver
}

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

4.3.3 กำหนดอินเตอร์เฟสผู้รับ

type IReceiver interface {
    Action()
}

4.3.4 การดำเนินการคลาสผู้รับที่แน่นอน

type Receiver struct {}

func (r *Receiver) Action() {
    fmt.Println("ดำเนินการ")
}

4.3.5 การดำเนินการบทบาทผู้เรียก

type Invoker struct {
    command ICommand
}

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

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

4.3.6 ตัวอย่างโค้ดของไคลเอนต์

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

5. ความแตกต่างระหว่างแบบแผนคำสั่งและแบบแผนกลยุทธ์

แบบแผนคำสั่งและแบบแผนกลยุทธ์คล้ายกันถึงแนวคิดบางประการ โดยทั้งคู่จะคลุมเครือข่ายพฤติกรรมบางประการเป็นอ็อบเจ็กต์ ความแตกต่างอยู่ที่แบบแผนคำสั่งใช้สำหรับการคลุมเครือข่ายคำขอโดยเฉพาะเป็นอ็อบเจ็กต์และดำเนินการใด ๆ อาทิเช่นการเยกเรื่องและการดำเนินการเย้กคืน ในขณะที่แบบแผนกลยุทธ์ใช้สำหรับการคลุมเครือข่ายของอัลกอริทึมต่าง ๆ และเลือกใช้อัลกอริทึมหนึ่งในขณะการดำเนินการแบบอัตราเร็วเวลาการทำงาน

แบบแผนคำสั่งเหมาะสำหรับการดำเนินงานเช่นการบันทึกและการบัญชี ในขณะที่แบบแผนกลยุทธ์เหมาะสำหรับการเปลี่ยนแปลงของโลจิกที่ยืดหยุ่นขึ้น