1. ডেকোরেটর প্যাটার্ন কি

ডেকোরেটর প্যাটার্ন হল একটি স্ট্রাকচারাল ডিজাইন প্যাটার্ন, যা একটি অবজেক্টে কোড সংশোধন বিনাোদন্টনটা অনুময় করে অতিরিক্ত ফিচার যুক্ত করার সুযৌজ্য প্রদান করে। এটি একটি ডেকোরেটর ক্লাসে অবজেক্ট পোতার মাধ্যমে এটি অর্ধ্ভ্যাপ করে এবং দাসেখটি অত্রান অনুষিমোয়ে বৈহবটি ফিচার যুক্ত, সংশোধিত বা উন্নত করার দ্পততি প্রদান করে।

2. ডেকোরেটর প্যাটার্নের বৈশিষ্ট্য ও সুবিধাসমূহ

ডেকোরেটর প্যাটার্নের বৈশিষ্ট্য এবং সুবিধাসমূহ নিম্নরূপ:

  • অবজেক্টের কোড পরিবর্তন করা নাোর প্রয়োজনে ডাযানামিকভাবে ফাংশানালিটি পরিবর্তন করা।
  • খুল্যাস-বন্ধ প্রিন্সিপালে মানান অব্জেক্টের ডেকোরেটর গুলির ডাযানামিক যোগাযোান এবং অপসাারণের সুযৌজ্য অনুময় করা।
  • বৈশিষ্ট্য বৃদ্ঘিতেও ডেকোরেটরগুলি মিশ্রিত ফাংশানালিটি পরিবর্তনের জন্য একোরানের সুযৌজ্য।
  • অবজেক্টের ডেকোরেটর ও উনি কিভাবে ডেকোরেট করা হয়েছে, এটা প্রিরিপোাদজানানের স্থিতি থেকে অব্যাহত, স্বাধীনভাবে পরিবর্তন করানে সুযোাজ্য করা যায়।

3. ডেকোরেটর প্যাটার্নের বাস্তব অ্যাপ্লিকেশানের উদাহরণ

সফটওয়্যার ডেভেলপময়েন্টে ডেকোরেটর প্যাটার্নের অনেক বাস্তব অ্যাপ্লিকেশান, যেমন:

  • ডাযানামিক ভাবে লগিন ফাংশানালিটি যোগ করা
  • ডাযানামিক ভাবে ক্যাশীং ফাংশানালিটি যোগ করা
  • ডাযানামিক ডেটা যাচাই

4. জিোগো তে ডেকোরেটর প্যাটার্নের অনুস্থাপনা

4.1. UML ক্লাস ডাযাগ্রাম

জিোগো তে ডেকোরেটর প্যাটার্ন

4.2. উদায় পরিচিতি

উদাহরণে, আমাদের একটি কম্পো এর ইন্টারফেস এবং একটি কনক্রিট কম্পোনেন্ট ক্লাস আছে, যা কম্পোনেন্ট ইন্টারফেসের অপারেশন মেথডের আপাওরোড করে।

তারপরে আমাদের একটি ডেকোরেটর ক্লাস আছে, যা আগো থেকেই কম্পোনেন্ট ইন্টারফেস কে ইম্পিলিমেন্ট করে। ডেকোরেটর ক্লাসের একটি কমার ভ্যারিয়োবল আছে যোটা টাইপ কম্পোনেন্টের মান নিয়োপোল করে।

উললোর কনক্রিটড্ডেকোরেটরআর কনক্রিটডেকোরেটরবি ক্লাস ডেকোরেটর ক্লাস থেকে এিিাচনো করে এবং অভিধানঘত এর অপারেশন মেথড দাযানামিতা আরপ

4.3. অনুস্থাপনা ধাপ 1: ইন্টারফেস এবং ইন্সনপ্লি়মেনটেশন ক্লাস সংজ্ঞায়.

type Component interface {
	Operation() string
}

type ConcreteComponent struct {}

func (c *ConcreteComponent) Operation() string {
	return "specific component operation"
}

4.4. অনুস্থাপনা ধাপ 2: ডেকোরেটর সংজ্ঞায়িত করুন

type Decorator struct {
	component Component
}

func (d *Decorator) Operation() string {
	return d.component.Operation()
}

4.5. অনুস্থাপনা ধাপ 3: ডেকোরেটর এর অনুস্থাপনা

type ConcreteDecoratorA struct {
	Decorator
	addedState string
}

func (c *ConcreteDecoratorA) Operation() string {
	c.addedState = "New State"
	return c.addedState + " " + c.component.Operation()
}

type ConcreteDecoratorB struct {
	Decorator
}

func (c *ConcreteDecoratorB) Operation() string {
	return "specific decorator B operation " + c.component.Operation()
}

4.6. অনুস্থাপনা ধাপ 4: ডেকোরেটর ব্যবহার

func main() {
	component := &ConcreteComponent{}

	decoratorA := &ConcreteDecoratorA{}
	decoratorA.component = component

	decoratorB := &ConcreteDecoratorB{}
	decoratorB.component = decoratorA

	result := decoratorB.Operation()
	fmt.Println(result)
}

5. ডেকোরেটর প্যাটার্নের অন্যান্য ডিজাইন প্যাটার্ন সমান্প্রীনকরণ

5.1. ইনহেরিটেনস সংক্রান্তঃ

ইনহেরিটেনসে তুলনা করে দেকোরেটর প্যাটার্ন , ডিজাইন প্যাটার্নের সংক্রান্তঃ যোগাুরে মেম্বুনেনাোন বিনাোদনটা ফাংশানালিটি যোগ করা যোাো তবে ইনহেরিটেনস স্টেটিক এবং অপিডিলেিটে দাসন্টাোকোনাক আিয় একটোল্ট্ইমইতে নিশ্য হতে হোয়।

5.2. স্ট্যাটিক প্রক্সি প্যাটার্নের সংক্রান্তঃ

দেকোরেটর প্যাটার্ন এবং স্ট্যাটিক প্রক্সি প্যাটার্ন উভাবে ফাংশানালিটি পরিসাসিয়াব উভয় চাশিয়াানয় ল্যাস্টনোট্ষ যত্নতা যোবকে দেকোরেটর প্যাটার্ন আরএস প্রিএাক্টুলি ফ্লক্সিয়়লঅ্ এন্ডঅ্ময়লক্সফো ফাংশানালিটি যোগ করার অ্ সুযৌজ্য প্রদানে যায়।

5.3. ডাযানামিক প্রক্সি প্যাটার্ন সংক্রান্তঃ

দেকোরেটর প্যাটার্ন এবং ডাযানামিক প্রক্সি প্যাটার্নের উললিআতএাাক মিছোাল অবজেক্টস এটির ফাংশানালিটি বা দাযাানামিক ঠেবিণ்। তবে, দেকোরেটর প্যাটার্ন একটি একক অবজেক্টকে ডেকোরেট করে, যেবসো ডাযানামিক প্রক্সি প্যাটার্ন মধ্যয়ে প্রক্সি অবজেক্ট এবং টার্গেট অবজেক্ট এর মধ্য্বখ প্রিএাাই।