1.1 التعريف والمفهوم

نمط الأمر هو نمط تصميم سلوكي يسمح بتقنين الطلب ككائن، بحيث يمكنك تعيين المعلمة للعميل بمختلف الطلبات.

1.2 الغرض من نمط الأمر

الغرض الرئيسي من نمط الأمر هو فصل المرسل عن المستقبل. من خلال تقنين الطلب في كائن، يحتاج المرسل فقط للتفاعل مع كائن الأمر، دون التفاعل المباشر مع المستقبل.

2. خصائص ومزايا نمط الأمر

نمط الأمر له الخصائص والمزايا التالية:

  • تقنين الطلب في كائن يفصل المرسل عن المستقبل.
  • يمكنه تسجيل الطلبات وتنفيذ عمليات التراجع.
  • يمكن توسيع الأوامر الجديدة دون تغيير الشفرة الأصلية.

3. أمثلة عملية لتطبيق نمط الأمر

يمكن تطبيق نمط الأمر في السيناريوهات التالية:

  • الحاجة إلى فصل الطلب عن الكائن الذي ينفذ الأمر.
  • دعم العمليات التراجع وإعادة القيام.
  • تنفيذ مجموعة من العمليات بطريقة مؤجلة.

4.1 مخطط فئة UML

Golang Command Pattern

4.2 مقدمة المثال

في هذا المثال، سنقوم بإنشاء تنفيذ بسيط لنمط الأمر. لنفترض أن لدينا تلفزيون كمستقبل، قادر على تنفيذ الإجراءات لتشغيل وإيقاف. لدينا أيضًا جهاز تحكم عن بعد كمنادي، والذي يمكنه تعيين أوامر محددة وتنفيذها.

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. الفرق بين نمط الأمر ونمط الاستراتيجية

نمط الأمر ونمط الاستراتيجية مشابهان إلى حد ما، حيث يقوم كل منهما بتقنين سلوك معين في كائن. الفارق يكمن في أن نمط الأمر يُستخدم أساسًا لتقنين الطلبات ككائنات وتنفيذ وظائف مثل التراجع وتنفيذ الطوابو المؤجلة، بينما يُستخدم نمط الاستراتجية أساسًا لتقنين سلسلة من الخوارزميات واختيار خوارزمية واحدة للتنفيذ ديناميكيًا في وقت التشغيل.

يعتبر نمط الأمر أكثر تناسبًا للعمليات مثل تسجيل الأحداث والمحاسبة، في حين يعتبر نمط الاستراتيجية أكثر تناسبًا للتغييرات المرنة في المنطق التجاري.