Factory Design Pattern হল একটি Creational Design Pattern যা একটি অবজেক্ট তৈরি করার জন্য একটি ইন্টারফেস প্রদান করে, কিন্তু অবজেক্টের নির্দিষ্ট শ্রেণী (class) নির্বাচনের কাজটি সাবক্লাসের উপর নির্ভর করে। এর প্রধান লক্ষ্য হল কোডের নমনীয়তা এবং পরিবর্তনযোগ্যতা বৃদ্ধি করা, কারণ এটি ক্লাসের সৃষ্টির প্রক্রিয়া client থেকে আড়াল করে রাখে এবং client কে নির্দিষ্ট শ্রেণীর (class) ব্যাপারে চিন্তা না করতে দেয়।
Factory Design Pattern ব্যবহার করার সুবিধা:
- Encapsulation: অবজেক্ট নির্মাণের জটিলতা লুকিয়ে রাখা হয়।
- Loose Coupling: ক্লায়েন্ট কোড প্রযোজ্য অবজেক্টের বাস্তবায়ন থেকে আলাদা থাকে।
- Flexibility: নতুন ক্লাস যোগ করা সহজ হয়, কারণ
Factoryঅবজেক্ট নির্মাণের জন্য নির্দিষ্ট ক্লাসগুলির উপর নির্ভরশীল নয়।
Factory Design Pattern Example:
ধরা যাক, আমরা একটি Shape ফ্যাক্টরি তৈরি করতে চাই যা বিভিন্ন ধরনের Shape (যেমন Circle, Rectangle, Square) তৈরি করতে পারে। আমাদের ফ্যাক্টরি ক্লাস একটি নির্দিষ্ট ধরনের অবজেক্ট তৈরি করবে যেটি Shape ইন্টারফেস অনুসরণ করবে।
1. Shape Interface:
public interface Shape {
void draw();
}
2. Concrete Classes:
Circle, Rectangle, এবং Square ক্লাসগুলি Shape ইন্টারফেস ইমপ্লিমেন্ট করবে এবং তাদের নিজস্ব draw() মেথড রূপান্তর করবে।
// Circle class
public class Circle implements Shape {
@Override
public void draw() {
System.out.println("Inside Circle::draw() method.");
}
}
// Rectangle class
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Inside Rectangle::draw() method.");
}
}
// Square class
public class Square implements Shape {
@Override
public void draw() {
System.out.println("Inside Square::draw() method.");
}
}
3. ShapeFactory Class:
এটি একটি ফ্যাক্টরি ক্লাস যা Shape অবজেক্ট তৈরি করবে।
public class ShapeFactory {
// Use getShape method to get object of type shape
public Shape getShape(String shapeType){
if(shapeType == null){
return null;
}
if(shapeType.equalsIgnoreCase("CIRCLE")){
return new Circle();
} else if(shapeType.equalsIgnoreCase("RECTANGLE")){
return new Rectangle();
} else if(shapeType.equalsIgnoreCase("SQUARE")){
return new Square();
}
return null;
}
}
4. Factory Pattern Test Class:
এটি ShapeFactory ক্লাসের মাধ্যমে বিভিন্ন ধরনের Shape অবজেক্ট তৈরি করবে।
public class FactoryPatternDemo {
public static void main(String[] args) {
ShapeFactory shapeFactory = new ShapeFactory();
// Get an object of Circle and call its draw method
Shape shape1 = shapeFactory.getShape("CIRCLE");
shape1.draw();
// Get an object of Rectangle and call its draw method
Shape shape2 = shapeFactory.getShape("RECTANGLE");
shape2.draw();
// Get an object of Square and call its draw method
Shape shape3 = shapeFactory.getShape("SQUARE");
shape3.draw();
}
}
Output:
Inside Circle::draw() method.
Inside Rectangle::draw() method.
Inside Square::draw() method.
ব্যাখ্যা:
- Shape ইন্টারফেসটি সাধারণভাবে
draw()মেথড ঘোষণা করেছে। - Circle, Rectangle, এবং Square ক্লাসগুলি
Shapeইন্টারফেসকে ইমপ্লিমেন্ট করে তাদের নিজস্বdraw()মেথডে বিভিন্ন আউটপুট প্রদর্শন করেছে। - ShapeFactory ক্লাসটি
getShape()মেথডে একটি নির্দিষ্ট শ্রেণী (এখানেCircle,Rectangle,Square) রিটার্ন করছে। - FactoryPatternDemo ক্লাসটি ফ্যাক্টরি প্যাটার্নের মাধ্যমে অবজেক্ট তৈরি করে এবং সেই অবজেক্টের
draw()মেথড কল করছে।
Factory Design Pattern হল একটি শক্তিশালী প্যাটার্ন যা অ্যাপ্লিকেশনগুলোতে ফ্যাক্টরি ক্লাসের মাধ্যমে অবজেক্ট নির্মাণের সুবিধা প্রদান করে। এটি কোডের নমনীয়তা এবং সম্প্রসারণযোগ্যতা বাড়াতে সহায়তা করে।
Read more