1.1 تعریف اور تصور

کمانڈ پیٹرن ایک بارگرائی پیٹرن ہے جو درخواست کو ایک اشیاء کے طور پر المور میں منہضم کرنے کی اجازت دیتا ہے، تاکہ آپ صارف کو مختلف درخواستوں کے ساتھ پیرامیٹر کر سکیں۔

1.2 کمانڈ پیٹرن کا مقصد

کمانڈ پیٹرن کا اصل مقصد بھیجنے والے اور وصول کنندہ کو الگ کرنا ہے۔ درخواست کو ایک اشیاء میں منہضم کرکے، بھیجنے والے کو صرف کمانڈ اشیاء سے ہی منصوبے سے تعلق رکھنا ہوتا ہے، بغیر کہ وصول کنندہ کے ساتھ براہ راست تعامل کرنا ہو۔

2. کمانڈ پیٹرن کی خصوصیات اور فوائد

کمانڈ پیٹرن کی منفرد خصوصیات اور فوائد مندرجہ ذیل ہیں:

  • درخواست کو ایک اشیاء میں منہضم کرنے سے بھیجنے والے اور وصول کنندہ کو الگ کرتا ہے۔
  • یہ درخواستوں کو قیو کرنے، لاگ ریکارڈ کرنے، اور واپسی کارروائیاں کرنے کی سندھی ہے۔
  • نئی کمانڈز کو اصل کوڈ بدلے بغیر توسیع دی جا سکتی ہیں۔

3. کمانڈ پیٹرن کی عملی تطبیقات کے مثالیں

کمانڈ پیٹرن مندرجہ ذیل مواقع پر لاگو ہوتا ہے:

  • مطالبت ہے کہ درخواست کو اشیاء سے الگ کیا جائے جو کمانڈ کا عمل انجام دیتے ہیں۔
  • واپسی اور دوبارہ کارروائی کی مدد فراہم کرنا۔
  • مقرون طور پر ایک قطار شکل میں عمل کرنا۔

4.1 UML کلاس شکل

Golang کمانڈ پیٹرن

4.2 مثال کی تعارف

اس مثال میں، ہم کمانڈ پیٹرن کا ایک سادہ نمونہ بنائیں گے۔ فرض کریں ہمارے پاس رسیور کے طور پر ٹی وی ہے، جو چالو اور بند ہونے کے اعمال کا انجام دینے کی صلاحیت رکھتا ہے۔ ہمارے پاس اِنوکر کنندہ بھی ہے، جو مخصوص کمانڈز تعین کر سکتا ہے اور انہیں انجام دینے کے لئے قابل ہوتا ہے۔

4.3.1 کمانڈ انٹرفیس کی تعریف

type ICommand interface {
    Execute()
}

4.3.2 Concrete کمانڈ کلاس کا انفرادیت سے نمونہ لینا

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. کمانڈ پیٹرن اور استریٹجی پیٹرن کے درمیان فرق

کمانڈ پیٹرن اور استریٹجی پیٹرن کسی حد تک متشابہ ہیں، کیونکہ دونوں کسی اشیاء میں مخصوص عملوں کو المور کرتے ہیں۔ فرق اتنا ہے کہ کمانڈ پیٹرن کو عموماً درخواست کو ایک اشیاء کے طور پر منہضم کرنے اور تنسیل کرنے کا استعمال کرتے ہیں، جبکہ استریٹجی پیٹرن عمدتاً ایک سلسلہ الگورتھمز کو المور کرنے اور وقت جاری میں ایک الگورتھم کو منتخب کرنے کا استعمال کرتے ہیں۔

کمانڈ پیٹرن لاگنگ اور انکاؤنٹنگ کے عمل کے لئے زیادہ مناسب ہے، جبکہ استریٹجی پیٹرن کاروباری منطق میں مستقل تبدیلیوں کے لئے زیادہ مناسب ہے۔