কম্পিউটার টিউটোরিয়াল

C++-এ কম্পোজিট ডিজাইন প্যাটার্ন (Composite Design Pattern)

কম্পোজিট প্যাটার্ন (Composite pattern) वहाँ ব্যবহার হয় যেখানে আমাদের একগুচ্ছ অবজেক্টকে একটি একক অবজেক্টের মতো বəhাব করতে হয়। কম্পোজিট প্যাটার্ন অবজেক্টগুলকে ট্রি স্ট্রাকচার (tree structure) এর টার্মে কম্পোজ করে পার্ট (part) এবং হোল (whole) হায়ারার্কি রিপ্রেজেন্ট করে। এই টাইপের ডিজাইন প্যাটার্ন স্ট্রাকচারাল প্যাটার্ন (structural pattern) এর অধিনে পড়ে কারণ এটি অবজেক্ট গুচ্ছের ট্রি স্ট্রাকচার তৈরি করে।

এই প্যাটার্ন এমন একটি ক্লাস তৈরি করে যেটি নিজের অবজেক্ট গুচ্ছ ধারণ করে। এই ক্লাস তার একই টাইপের অবজেক্ট গুচ্ছ মডিফাই করার উপায় প্রদান করে।

আমরা কম্পোজিট প্যাটার্নের ব্যবহার নিচের উদাহরণে দেখাব যেখানে একটি সংস্থার কর্মচারীদের হায়ারার্কি (employees hierarchy) দেখানো হয়েছে।

C++-এ কম্পোজিট ডিজাইন প্যাটার্ন (Composite Design Pattern)

এখানে দেখা যাচ্ছে কম্পোজিট (Composite) এবং লিফ (Leaf) উভয় ক্লাসই কম্পোনেন্ট (Component) ইমপ্লিমেন্ট করছে। গুরুত্বপূর্ণ অংশ হলো কম্পোজিট ক্লাস, এটিও কম্পোনেন্ট অবজেক্ট ধারণ করে যা কম্পোজিশন রিলেশনশিপ (composition relationship) দিয়ে দেখানো হয়েছে।

উদাহরণ কোড

#include <iostream>
#include <vector>
using namespace std;

class PageObject {
    public:
        virtual void addItem(PageObject a) { }
        virtual void removeItem() { }
        virtual void deleteItem(PageObject a) { }
};

class Page : public PageObject {
    public:
        void addItem(PageObject a) {
            cout << "Item added into the page" << endl;
        }
        void removeItem() {
            cout << "Item Removed from page" << endl;
        }
        void deleteItem(PageObject a) {
            cout << "Item Deleted from Page" << endl;
        }
};

class Copy : public PageObject {
    vector<PageObject> copyPages;
    public:
        void AddElement(PageObject a) {
            copyPages.push_back(a);
        }
        void addItem(PageObject a) {
            cout << "Item added to the copy" << endl;
        }
        void removeItem() {
            cout << "Item removed from the copy" << endl;
        }
        void deleteItem(PageObject a) {
            cout << "Item deleted from the copy";
        }
};

int main() {
    Page p1;
    Page p2;
    Copy myCopy;
    myCopy.AddElement(p1);
    myCopy.AddElement(p2);
    myCopy.addItem(p1);
    p1.addItem(p2);
    myCopy.removeItem();
    p2.removeItem();
    return 0;
}

আউটপুট

Item added to the copy
Item added into the page
Item removed from the copy
Item Removed from page
  1. C++-এ আকর্ষণীয় প্যাটার্ন প্রিন্ট করার প্রোগ্রাম

  2. রেক্ট্যাঙ্গেল প্যাটার্ন প্রিন্ট (C++)

  3. সংখ্যা দিয়ে প্যাটার্ন প্রিন্ট (C++)

  4. C++ সিঙ্গলটন (Singleton) ডিজাইন প্যাটার্ন ব্যাখ্যা