Factory Method Pattern কী?
Factory Method Pattern হল একটি ক্রিয়েটিভ ডিজাইন প্যাটার্ন, যা Creational Design Pattern শ্রেণিভুক্ত। এই প্যাটার্নটি অবজেক্ট তৈরির জন্য একটি ইন্টারফেস সরবরাহ করে, কিন্তু সাবক্লাসকে নির্ধারণ করতে দেয় কোন ক্লাসের ইনস্ট্যান্স তৈরি করা হবে। এটি মূলত সাবক্লাসকে অবজেক্ট তৈরির প্রক্রিয়ায় নিয়ন্ত্রণ দেয়।
Factory Method Pattern-এর উদ্দেশ্য হল অবজেক্ট নির্মাণের সময়টা ক্লায়েন্ট কোড থেকে আড়াল করা, যাতে অবজেক্ট তৈরির প্রক্রিয়া পরিবর্তন বা সম্প্রসারণ করা যায়, কিন্তু ক্লায়েন্ট কোডে কোনো প্রভাব না ফেলে।
Factory Method Pattern এর উপাদান:
- Product: এটি ইন্টারফেস বা অ্যাবস্ট্রাক্ট ক্লাস যা সৃষ্ট অবজেক্টের সাধারণ বৈশিষ্ট্য প্রকাশ করে।
- ConcreteProduct: এটি
Productইন্টারফেস বা ক্লাসের কনক্রিট বাস্তবায়ন। - Creator: এটি একটি ক্লাস যা ফ্যাক্টরি মেথড ডিফাইন করে এবং সৃষ্ট অবজেক্টের জন্য ইন্টারফেস প্রদান করে।
- ConcreteCreator: এটি
Creatorক্লাসের কনক্রিট বাস্তবায়ন যা ফ্যাক্টরি মেথডে অবজেক্ট তৈরি করে।
Factory Method Pattern এর সুবিধা:
- Object creation hiding: অবজেক্ট তৈরি করার প্রক্রিয়া ক্লায়েন্ট কোড থেকে আড়াল করা হয়।
- Extensibility: নতুন ধরনের অবজেক্ট তৈরি করতে সাবক্লাস ব্যবহার করা যায়, তবে ক্লায়েন্ট কোডে কোনো পরিবর্তন না করেই।
- Loose coupling: ক্লায়েন্ট এবং অবজেক্টের মধ্যে কম নির্ভরশীলতা থাকে, যা কোডের রক্ষণাবেক্ষণ সহজ করে।
Factory Method Pattern উদাহরণ
ধরা যাক, একটি সফটওয়্যার সিস্টেমে বিভিন্ন ধরনের ডকুমেন্ট (যেমন PDFDocument, WordDocument) তৈরি করতে হবে। এখানে একটি সাধারণ Document ইন্টারফেস থাকবে, এবং প্রতিটি ডকুমেন্টের নিজস্ব কনক্রিট ক্লাস থাকবে। এছাড়া, DocumentCreator ইন্টারফেসের মাধ্যমে এই ডকুমেন্ট তৈরি করা হবে।
Step 1: Product Interface (Document)
// Product Interface
public interface Document {
void create();
}
Step 2: ConcreteProduct (PDFDocument এবং WordDocument)
// ConcreteProduct: PDFDocument
public class PDFDocument implements Document {
@Override
public void create() {
System.out.println("Creating a PDF document");
}
}
// ConcreteProduct: WordDocument
public class WordDocument implements Document {
@Override
public void create() {
System.out.println("Creating a Word document");
}
}
Step 3: Creator Interface (DocumentCreator)
// Creator Interface
public interface DocumentCreator {
Document createDocument();
}
Step 4: ConcreteCreator (PDFDocumentCreator এবং WordDocumentCreator)
// ConcreteCreator: PDFDocumentCreator
public class PDFDocumentCreator implements DocumentCreator {
@Override
public Document createDocument() {
return new PDFDocument();
}
}
// ConcreteCreator: WordDocumentCreator
public class WordDocumentCreator implements DocumentCreator {
@Override
public Document createDocument() {
return new WordDocument();
}
}
Step 5: Client Code
public class FactoryMethodPatternExample {
public static void main(String[] args) {
DocumentCreator pdfCreator = new PDFDocumentCreator();
Document pdf = pdfCreator.createDocument();
pdf.create(); // Output: Creating a PDF document
DocumentCreator wordCreator = new WordDocumentCreator();
Document word = wordCreator.createDocument();
word.create(); // Output: Creating a Word document
}
}
ব্যাখ্যা:
- Document ইন্টারফেসটি সমস্ত ডকুমেন্টের জন্য একটি সাধারণ কনট্র্যাক্ট প্রদান করে।
- PDFDocument এবং WordDocument হলো কনক্রিট ক্লাস যা
Documentইন্টারফেসের বাস্তবায়ন। - DocumentCreator ইন্টারফেসটি
createDocument()মেথড প্রদান করে, যেটিDocumentঅবজেক্ট তৈরি করার জন্য ব্যবহৃত হয়। - PDFDocumentCreator এবং WordDocumentCreator হল কনক্রিট ক্লাস যা যথাক্রমে PDF এবং Word ডকুমেন্ট তৈরি করে।
এখন, Factory Method প্যাটার্নের মাধ্যমে আপনি নতুন ধরনের ডকুমেন্ট তৈরি করতে পারেন, যেমন ExcelDocumentCreator যোগ করতে পারবেন, এবং ক্লায়েন্ট কোডে কোনো পরিবর্তন করতে হবে না।
4. Factory Method Pattern এর সুবিধা
- Encapsulation: অবজেক্ট তৈরি করার প্রক্রিয়াকে ক্লায়েন্ট কোড থেকে আড়াল করা যায়, যা ক্লায়েন্টকে শুধুমাত্র ইন্টারফেসের সাথে কাজ করার সুযোগ দেয়।
- Extensibility: নতুন ধরনের ডকুমেন্ট যোগ করতে হলে শুধুমাত্র নতুন ConcreteCreator ক্লাস তৈরি করতে হবে। এর ফলে কোডের রক্ষণাবেক্ষণ সহজ হয় এবং নতুন ফিচার যোগ করা সহজ হয়।
- Loose Coupling: ক্লায়েন্ট কোড সরাসরি ডকুমেন্টের কনক্রিট ক্লাসের উপর নির্ভরশীল নয়। তারা শুধুমাত্র Document ইন্টারফেস ব্যবহার করছে, যা নতুন ক্লাস যোগ করার সময় কোনো সমস্যার সৃষ্টি করবে না।
সারাংশ
Factory Method Pattern একটি কার্যকরী ডিজাইন প্যাটার্ন যা অবজেক্ট তৈরি করার প্রক্রিয়াকে আড়াল করে এবং সাবক্লাসকে নির্ধারণ করতে দেয় কোন অবজেক্ট তৈরি করা হবে। এটি Creational Design Pattern এর মধ্যে পড়ে এবং Loose Coupling ও Extensibility সুবিধা প্রদান করে। এর মাধ্যমে নতুন ধরনের অবজেক্ট তৈরি করা সহজ হয় এবং কোডের রক্ষণাবেক্ষণ সহজতর হয়।