1. Home
  2. ডিজাইন প্যাটার্ন
  3. পরিচিতি:
  4. ৪। ডেকোরেটর প্যাটার্ন

৪। ডেকোরেটর প্যাটার্ন

ডেকোরেটর প্যাটার্নের ধারণা

ডেকোরেটর প্যাটার্ন ব্যবহার করে কোনো অবজেক্টের মূল গঠন পরিবর্তন না করেই নতুন ফিচার বা কার্যকারিতা যুক্ত করা যায়। অর্থাৎ, এটি মূল অবজেক্টটিকে মোড়ানোর মাধ্যমে তার কার্যক্ষমতা বাড়ায় এবং নির্দিষ্ট দায়িত্ব প্রদান করে।

গল্পের মাধ্যমে ডেকোরেটর প্যাটার্ন ব্যাখ্যা

গল্প: ধরুন, সাইমন একটি কফি শপ খুলেছেন। কফি শপে তিনি বিভিন্ন ধরনের কফি বিক্রি করেন, যেমন সাধারণ কফি, কফির সঙ্গে চকলেট বা ক্রিম, ইত্যাদি। তবে, সাইমনের লক্ষ্য কফির বৈচিত্র্য বাড়ানো, যেন গ্রাহকরা কফির সাথে বিভিন্ন উপকরণ যেমন চকলেট, মিল্ক, বা হুইপড ক্রিম যোগ করতে পারেন।

প্রথমে তিনি ভাবলেন প্রতিটি কফির ধরন অনুযায়ী আলাদা আলাদা ক্লাস তৈরি করবেন, যেমন BasicCoffee, CoffeeWithChocolate, CoffeeWithCream, ইত্যাদি। কিন্তু এতে কোড জটিল এবং অপরিবর্তনীয় হয়ে যাবে।

তাই তিনি ডেকোরেটর প্যাটার্ন ব্যবহার করার সিদ্ধান্ত নিলেন।

ডেকোরেটর প্যাটার্ন দিয়ে বাস্তবায়ন

Step 1: BasicCoffee ক্লাস

প্রথমে একটি সাধারণ কফির জন্য একটি বেসিক ক্লাস তৈরি করি, যা মূল কফির দাম দেয়।

class BasicCoffee:
    def cost(self):
        return 5  # সাধারণ কফির দাম ৫ টাকা

Step 2: ডেকোরেটর প্যাটার্ন দিয়ে কফির উপর বিভিন্ন উপকরণ যোগ করা

এবার আমরা ডেকোরেটর ক্লাস তৈরি করি, যেটি মূল কফির সাথে চকলেট, ক্রিম ইত্যাদি যোগ করার ফিচার দেবে।

class CoffeeDecorator:
    def __init__(self, coffee):
        self._coffee = coffee

    def cost(self):
        return self._coffee.cost()

Step 3: চকলেট ডেকোরেটর

এবার একটি চকলেট ডেকোরেটর তৈরি করা যেটি মূল কফির সাথে চকলেট যোগ করবে।

class ChocolateDecorator(CoffeeDecorator):
    def cost(self):
        return self._coffee.cost() + 2  # চকলেট যোগ করলে দাম ২ টাকা বাড়বে

Step 4: ক্রিম ডেকোরেটর

এখানে আমরা একটি ক্রিম ডেকোরেটর যুক্ত করছি।

class CreamDecorator(CoffeeDecorator):
    def cost(self):
        return self._coffee.cost() + 3  # ক্রিম যোগ করলে দাম ৩ টাকা বাড়বে

উদাহরণ ব্যবহার

এখন ধরুন, সাইমনের কাস্টমার একটি সাধারণ কফি অর্ডার করেন, এবং তিনি সেটাতে চকলেট ও ক্রিম যোগ করতে চান।

# একটি সাধারণ কফি তৈরি
coffee = BasicCoffee()
print("Basic Coffee Cost:", coffee.cost())  # আউটপুট: Basic Coffee Cost: 5

# কফির সাথে চকলেট যোগ
coffee_with_chocolate = ChocolateDecorator(coffee)
print("Coffee with Chocolate Cost:", coffee_with_chocolate.cost())  # আউটপুট: Coffee with Chocolate Cost: 7

# কফির সাথে চকলেট ও ক্রিম যোগ
coffee_with_chocolate_and_cream = CreamDecorator(coffee_with_chocolate)
print("Coffee with Chocolate and Cream Cost:", coffee_with_chocolate_and_cream.cost())  # আউটপুট: Coffee with Chocolate and Cream Cost: 10

কিভাবে ডেকোরেটর প্যাটার্নটি সাহায্য করল?

এই প্যাটার্ন ব্যবহার করে সাইমন কফির মূল ক্লাস পরিবর্তন না করেই বিভিন্ন উপকরণ যোগ করতে পারলেন। এর ফলে:

  1. পুনঃব্যবহারযোগ্য কোড তৈরি হল।
  2. জটিলতা কমানো গেল, কারণ প্রত্যেকটি উপকরণকে আলাদা ডেকোরেটর ক্লাসে রাখা হয়েছে।
  3. সাইমন সহজেই নতুন উপকরণ যোগ করতে পারবেন যেমন MilkDecorator, SugarDecorator ইত্যাদি।

ডেকোরেটর প্যাটার্ন ব্যবহার করে, সাইমন কফি শপের মেন্যুতে বিভিন্ন বৈচিত্র্য এনেছেন এবং প্রতিটি কফির জন্য আলাদা ক্লাস না বানিয়ে কফিতে নতুন উপকরণ যুক্ত করেছেন!

How can we help?