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. কমান্ড প্যাটার্ন এবং রণনীতি প্যাটার্নের পার্থক্য

কমান্ড প্যাটার্ন এবং রণনীতি প্যাটার্ন একে অন্যকের সাপেক্ষে অনেকটা মিল থাকে, কারণ উভয়ই নির্দিষ্ট আচরণগুলি অবজেক্টে এনক্যাপ্সুলেট করে। পার্থক্য হল কমান্ড প্যাটার্ন মূলত অনুরোধগুলি অবজেক্ট হিসেবে এনক্যাপ্সুলেট এবং বাতিল এবং অনুষ্ঠান সারিবদ্ধ ক্রিয়া অনুষ্ঠান ব্যতীত রণনীতি প্যাটার্ন প্রায়র্থমিকভাবে ধ্যানাকর্ষণ করার জন্য ব্যবহৃত হয়।

কমান্ড প্যাটার্ন বেশ কিছু অপারেশন যেমন লগিং এবং হিসেবকরণের জন্য উপযোগী, যখন রণনীতি প্যাটার্ন ব্যবসায়িক লজিকের সরল পরিবর্তন এর জন্য উপযোগী মানা যায়।