Abstract Factory Pattern

Creational Design Patterns - জাভায় ডিজাইন প্যাটার্ন (Design Patterns in Java) - Java Technologies

314

Abstract Factory Pattern হল একটি Creational Design Pattern, যা একাধিক সম্পর্কিত বা নির্ভরশীল অবজেক্ট তৈরি করতে ব্যবহৃত হয়, যেখানে এটি একটি ইন্টারফেস প্রদান করে যা সাবক্লাসগুলিকে কনক্রিট অবজেক্ট তৈরি করার সুযোগ দেয়। এর প্রধান উদ্দেশ্য হল গ্রাহক ক্লাসটি নির্দিষ্ট ক্লাসে নির্ভর না হয়ে, একাধিক ভিন্ন ভিন্ন ক্লাসের সমন্বয়ে অবজেক্ট তৈরি করার সুবিধা প্রদান করা।

1. Abstract Factory Pattern কী?

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

Abstract Factory প্যাটার্নের সাহায্যে, আপনি এক ধরনের অবজেক্টের সমষ্টি তৈরি করতে পারেন, যেমন বিভিন্ন ধরনের গ্রাফিক্যাল ইউজার ইন্টারফেস (GUI) কম্পোনেন্ট (বাটন, টেক্সট ফিল্ড, মেনু ইত্যাদি) একত্রিত করা।


2. Abstract Factory Pattern এর কাঠামো

Abstract Factory Pattern তিনটি প্রধান উপাদান নিয়ে গঠিত:

  1. AbstractFactory: একটি ইন্টারফেস বা অ্যাবস্ট্রাক্ট ক্লাস যা ফ্যাক্টরি মেথডগুলির জন্য একক অর্ডার প্রদান করে।
  2. ConcreteFactory: এটি AbstractFactory ইন্টারফেসে ঘোষণা করা মেথডগুলোকে বাস্তবায়ন করে।
  3. AbstractProduct: একটি অ্যাবস্ট্রাক্ট ক্লাস বা ইন্টারফেস যা বিভিন্ন প্রকারের পণ্য তৈরি করে।
  4. ConcreteProduct: এটি AbstractProduct এর বাস্তবায়ন এবং এটি কনক্রিট প্রোডাক্ট তৈরি করে।

3. Abstract Factory Pattern উদাহরণ

ধরা যাক আমাদের দুটি ভিন্ন প্ল্যাটফর্মে (উইন্ডোজ এবং ম্যাক) গ্রাফিক্যাল ইউজার ইন্টারফেস (GUI) উপাদান তৈরি করতে হবে। প্রতিটি প্ল্যাটফর্মের জন্য ভিন্ন ভিন্ন Button এবং Checkbox হবে। তবে, গ্রাহক ক্লাসটি কোন প্ল্যাটফর্মে কাজ করবে তাও জানবে না, শুধু যে প্ল্যাটফর্মের উপাদান প্রয়োজন তা জানবে। এই ধরনের সমস্যা সমাধানে Abstract Factory Pattern ব্যবহৃত হবে।

3.1. Abstract Factory Pattern Implementation

// Abstract product: Button
interface Button {
    void render();
}

// Concrete product: Windows Button
class WindowsButton implements Button {
    public void render() {
        System.out.println("Rendering Windows Button");
    }
}

// Concrete product: Mac Button
class MacButton implements Button {
    public void render() {
        System.out.println("Rendering Mac Button");
    }
}

// Abstract product: Checkbox
interface Checkbox {
    void render();
}

// Concrete product: Windows Checkbox
class WindowsCheckbox implements Checkbox {
    public void render() {
        System.out.println("Rendering Windows Checkbox");
    }
}

// Concrete product: Mac Checkbox
class MacCheckbox implements Checkbox {
    public void render() {
        System.out.println("Rendering Mac Checkbox");
    }
}

// Abstract factory
interface GUIFactory {
    Button createButton();
    Checkbox createCheckbox();
}

// Concrete factory: Windows Factory
class WindowsFactory implements GUIFactory {
    public Button createButton() {
        return new WindowsButton();
    }

    public Checkbox createCheckbox() {
        return new WindowsCheckbox();
    }
}

// Concrete factory: Mac Factory
class MacFactory implements GUIFactory {
    public Button createButton() {
        return new MacButton();
    }

    public Checkbox createCheckbox() {
        return new MacCheckbox();
    }
}

// Client code
public class Application {
    private Button button;
    private Checkbox checkbox;

    // Constructor accepts a GUI factory (abstract factory)
    public Application(GUIFactory factory) {
        button = factory.createButton();
        checkbox = factory.createCheckbox();
    }

    public void renderUI() {
        button.render();
        checkbox.render();
    }

    public static void main(String[] args) {
        // Choose the factory based on the OS
        GUIFactory factory = new WindowsFactory();
        Application app = new Application(factory);
        app.renderUI();  // Will render Windows button and checkbox

        System.out.println("----");

        factory = new MacFactory();
        app = new Application(factory);
        app.renderUI();  // Will render Mac button and checkbox
    }
}

ব্যাখ্যা:

  1. Button এবং Checkbox হল AbstractProduct ইন্টারফেস, যা সাধারণ পণ্য তৈরি করে।
  2. WindowsButton, MacButton, WindowsCheckbox, এবং MacCheckbox হল ConcreteProduct, যেগুলি নির্দিষ্ট প্ল্যাটফর্মের জন্য বাস্তবায়ন করা হয়েছে।
  3. GUIFactory হল AbstractFactory ইন্টারফেস যা createButton() এবং createCheckbox() মেথড ঘোষণা করে।
  4. WindowsFactory এবং MacFactory হল ConcreteFactory যা নির্দিষ্ট প্ল্যাটফর্মের উপাদান তৈরি করে।

আউটপুট:

Rendering Windows Button
Rendering Windows Checkbox
----
Rendering Mac Button
Rendering Mac Checkbox

4. Abstract Factory Pattern এর সুবিধা

  1. Encapsulation: গ্রাহক কোড (Client code) ফ্যাক্টরি ক্লাসের কার্যকারিতা জানবে না, শুধু উপাদানগুলি তৈরি করার জন্য ইন্টারফেস ব্যবহার করবে। এটি ক্লাসের বাস্তবায়ন সংক্রান্ত তথ্য লুকিয়ে রাখে।
  2. Loose Coupling: গ্রাহক কোড এবং কনক্রিট ফ্যাক্টরি (Concrete Factory) এর মধ্যে loose coupling রাখে। এটি একটি ফ্যাক্টরি ইন্টারফেস দিয়ে একাধিক প্ল্যাটফর্মের উপাদান তৈরি করতে সহায়ক।
  3. Product Consistency: একটি নির্দিষ্ট প্ল্যাটফর্মের সব উপাদান (যেমন, উইন্ডোজের বাটন এবং চেকবক্স) একইভাবে তৈরি হয় এবং তারা একে অপরের সাথে সামঞ্জস্যপূর্ণ হয়।

5. Abstract Factory Pattern এর ব্যবহার

  • GUI Frameworks: একাধিক প্ল্যাটফর্মের জন্য ইউনিফর্ম ইউজার ইন্টারফেস উপাদান তৈরি করতে Abstract Factory Pattern ব্যবহৃত হয়। যেমন উইন্ডোজ, ম্যাক এবং লিনাক্সে এক ধরনের বাটন এবং চেকবক্স তৈরি করা।
  • Database Connectivity: একাধিক ডেটাবেস (MySQL, Oracle, PostgreSQL) সংযোগ স্থাপনের জন্য একাধিক ফ্যাক্টরি তৈরি করা যেতে পারে।
  • Document Generators: একাধিক ডকুমেন্ট ফর্ম্যাট (PDF, HTML, Word) তৈরির জন্য পৃথক ফ্যাক্টরি ব্যবহৃত হয়।

সারাংশ

Abstract Factory Pattern একটি ডিজাইন প্যাটার্ন যা সম্পর্কিত অবজেক্টগুলির জন্য একটি সাধারণ ইন্টারফেস প্রদান করে, এবং গ্রাহক কোডটি সরাসরি কনক্রিট ক্লাসের উপর নির্ভর না হয়ে, বিভিন্ন প্ল্যাটফর্মের উপাদান তৈরি করতে পারে। এটি ব্যবহৃত হয় বিভিন্ন ধরনের সম্পর্কিত অবজেক্ট একত্রিত করার জন্য এবং এতে loose coupling এবং encapsulation সুবিধা প্রদান করা হয়। Java তে GUI, ডেটাবেস কানেকশন এবং ডকুমেন্ট জেনারেটর তৈরির ক্ষেত্রে এটি ব্যাপকভাবে ব্যবহৃত হয়।

Content added By
Promotion

Are you sure to start over?

Loading...