
Abstract Factory Design Pattern কী?
Abstract Factory হলো একটি Creational Design Pattern, যা concrete class-এর নাম সরাসরি উল্লেখ না করে সম্পর্কিত বা পরস্পরনির্ভর object-এর একটি family তৈরি করার interface প্রদান করে।
ধরো, একটি application-এ Dark ও Light—দুই ধরনের UI theme রয়েছে। Dark theme ব্যবহার করলে Button, TextBox এবং অন্যান্য UI component-ও Dark theme-এর সঙ্গে সামঞ্জস্যপূর্ণ হতে হবে। একইভাবে Light theme-এর ক্ষেত্রে সব component Light theme অনুসরণ করবে।
প্রতিটি component আলাদাভাবে তৈরি করলে ভুল করে ভিন্ন theme-এর component একসঙ্গে ব্যবহার করার সম্ভাবনা থাকে। Abstract Factory ব্যবহার করে একটি নির্দিষ্ট theme-এর জন্য প্রয়োজনীয় component-গুলো একই factory থেকে তৈরি করা যায়।
এই pattern-এর মূল উদ্দেশ্য শুধু object তৈরির কাজ আলাদা করা নয়; বরং সম্পর্কিত object-গুলোর creation-কে একটি সাধারণ abstraction-এর অধীনে আনা, যাতে client code concrete implementation-এর ওপর সরাসরি নির্ভর না করে।
তবে তার আগে আমাদেরকে Factory Method Design Pattern সম্পর্কে জানতে হবে।
আরেকবার রিক্যাপ করি ঃ Factory Method Design Pattern এ প্রতিটি কনক্রিট ক্লাসের জন্য আলাদা ফ্যাক্টরি ক্লাস থাকে।
Example :
Button Interface যেখানে বাটন তৈরি করার জন্য render method declare করা হয়েছে। \
public interface Button {
public void render();
}
\
TextBox Interface যেখানে TextBox তৈরি করার জন্য render method declare করা হয়েছে।
public interface TextBox {
public void render();
}
LightButton Class যেখানে Light Button তৈরি করার জন্য প্রয়োজনীয় লজিক ইম্প্লিমেন্ট করতে হবে।
public class LightButton implements Button {
@Override
public void render(){
System.out.println("This is a Light Button");
}
}
DarkButton Class যেখানে Dark Button তৈরি করার জন্য প্রয়োজনীয় লজিক ইম্প্লিমেন্ট করতে হবে।
\
public class DarkButton implements Button {
@Override
public void render(){
System.out.println("This is a DarkButton");
}
}
**
**
LightTextBox Class যেখানে Light TextBox তৈরি করার জন্য প্রয়োজনীয় লজিক ইম্প্লিমেন্ট করতে হবে।
public class LightTextBox implements TextBox{
@Override
public void render(){
System.out.println("This is a Light TextBox");
}
}
**
**
DarkTextBox Class যেখানে Dark TextBox তৈরি করার জন্য প্রয়োজনীয় লজিক ইম্প্লিমেন্ট করতে হবে।
public class DarkTextBox implements TextBox{
@Override
public void render(){
System.out.println("This is a DarkTextBox");
}
}
**
**
**
**
GUIFactory যেখানে UI এর প্রয়োজনীয় কম্পনেন্ট পাস করার জন্য মেথড ডেক্লেয়ার করা হয়েছে।
**
**
public interface GUIFactory {
public Button createButton();
public TextBox createTextBox();
}
**
**
LightGUI Class যেখানে Light UI এর প্রয়োজনীয় কম্পনেন্ট return করা হয়েছে।
\
public class LightGUI implements GUIFactory {
@Override
public Button createButton() {
return new LightButton();
}
@Override
public TextBox createTextBox() {
return new LightTextBox();
}
}
**
**
DarkGUI Class যেখানে Dark UI এর প্রয়োজনীয় কম্পনেন্ট return করা হয়েছে।
public class DarkGUI implements GUIFactory {
@Override
public Button createButton() {
return new DarkButton();
}
@Override
public TextBox createTextBox() {
return new DarkTextBox();
}
}
**
**
public class Main {
**
**
public static void main(String[] args) {
**
**
//LightGUI তৈরি করা হয়েছে।
\
GUIFactory lightGUI = new LightGUI();
**
**
//lightGUI object থেকে createButton() method কল করে Light Button তৈরি করা হয়েছে।
**
**
**Button lightButton = lightGUI.**createButton();
//This is a Light Button
\
//lightGUI object থেকে createTextBox() method কল করে Light TextBox তৈরি করা হয়েছে।
\
TextBox lightTextBox = lightGUI.createTextBox();
//This is a Light TextBox
}
**
**
}
public class Main {
public static void main(String[] args) {
//LightGUI তৈরি করা হয়েছে।
GUIFactory lightGUI = new LightGUI();
//lightGUI object থেকে createButton() method কল করে Light Button তৈরি করা হয়েছে।
Button lightButton = lightGUI.createButton();
//This is a Light Button
//lightGUI object থেকে createTextBox() method কল করে Light TextBox তৈরি করা হয়েছে।
TextBox lightTextBox = lightGUI.createTextBox();
//This is a Light TextBox
}
}
Comments
Join the discussionNo comments yet. Be the first to comment.
Design Pattern
This is a design pattern series. Where you can find important object oriented patterns that helps you to write better maintainable and clean code

