1.1 นิยามและแนวคิด
แบบแผนคำสั่ง (command pattern) เป็นแบบแผนทางพฤติกรรมที่อนุญาตให้คลุมเครือข่ายคำร้องขอเป็นอ็อบเจ็กต์ เพื่อที่คุณสามารถกำหนดพารามิเตอร์ให้กับไคลเอนต์ด้วยคำร้องขอที่แตกต่างกัน
1.2 วัตถุประสงค์ของแบบแผนคำสั่ง
วัตถุประสงค์หลักของแบบแผนคำสั่งคือการแยกตัวส่งและผู้รับ โดยการใส่คำร้องขอลงในอ็อบเจ็กต์ ตัวส่งจะต้องมีการจับคู่กับอ็อบเจ็กต์คำสั่งเท่านั้น โดดไม่ต้องมีการจับคู่โดยตรงกับผู้รับ
2. ลักษณะและประโยชน์ของแบบแผนคำสั่ง
แบบแผนคำสั่งมีลักษณะและประโยชน์ดังต่อไปนี้:
- การใส่คำร้องขอลงในอ็อบเจ็กต์ทำให้ส่งและผู้รับแยกตัว
- สามารถจัดคิวคำร้องขอ บันทึกบันทึก และดำเนินการเยกเรื่องกลับ
- สามารถขยายคำสั่งใหม่โดยไม่ต้องเปลี่ยนแปลงโค้ดเดิม
3. ตัวอย่างของการใช้แบบแผนคำสั่งในการปฏิบัติ
แบบแผนคำสั่งนำไปใช้ได้ในสถานการณ์ต่อไปนี้:
- ต้องการแยกตัวคำขอออกจากอ็อบเจ็กต์ที่ดำเนินการคำสั่ง
- การสนับสนุนการดำเนินการเยกเรื่องและดำเนินการเรียกคืน
- การดำเนินการเซ็ตของดำเนินการคำสั่งเรียง
4.1 ไดอะแกรมคลาส UML
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. ความแตกต่างระหว่างแบบแผนคำสั่งและแบบแผนกลยุทธ์
แบบแผนคำสั่งและแบบแผนกลยุทธ์คล้ายกันถึงแนวคิดบางประการ โดยทั้งคู่จะคลุมเครือข่ายพฤติกรรมบางประการเป็นอ็อบเจ็กต์ ความแตกต่างอยู่ที่แบบแผนคำสั่งใช้สำหรับการคลุมเครือข่ายคำขอโดยเฉพาะเป็นอ็อบเจ็กต์และดำเนินการใด ๆ อาทิเช่นการเยกเรื่องและการดำเนินการเย้กคืน ในขณะที่แบบแผนกลยุทธ์ใช้สำหรับการคลุมเครือข่ายของอัลกอริทึมต่าง ๆ และเลือกใช้อัลกอริทึมหนึ่งในขณะการดำเนินการแบบอัตราเร็วเวลาการทำงาน
แบบแผนคำสั่งเหมาะสำหรับการดำเนินงานเช่นการบันทึกและการบัญชี ในขณะที่แบบแผนกลยุทธ์เหมาะสำหรับการเปลี่ยนแปลงของโลจิกที่ยืดหยุ่นขึ้น