Bridge Pattern হল একটি Structural Design Pattern যা abstraction এবং implementation এর মধ্যে একটি পৃথক ব্রিজ তৈরি করে, যাতে তারা একে অপরের থেকে স্বাধীনভাবে বিকশিত হতে পারে। এটি মূলত এমন একটি কাঠামো তৈরি করে যা abstraction স্তর এবং implementation স্তরের মধ্যে পার্থক্য সৃষ্টি করে এবং সেগুলিকে একে অপর থেকে আলাদা করে।
Bridge Pattern এর উদ্দেশ্য হলো, abstraction (যা ক্লাসের বাইরের ব্যবহারকারীর জন্য ইন্টারফেস সরবরাহ করে) এবং implementation (যা প্রকৃত কার্যকারিতা নির্ধারণ করে) এর মধ্যে শক্তি সম্পর্ক প্রতিষ্ঠা করা, যাতে পরবর্তীতে এদের একে অপরের থেকে স্বাধীনভাবে পরিবর্তন করা যায়।
Bridge Pattern এর মৌলিক কাঠামো
- Abstraction: এটি একটি উচ্চ স্তরের ক্লাস যা ইউজার ইন্টারফেস বা পাবলিক ইন্টারফেস সরবরাহ করে এবং একটি Implementor অবজেক্টে যোগাযোগ করে।
- Refined Abstraction: এটি
Abstractionক্লাসের একটি সম্প্রসারণ যা অধিকাংশ ক্ষেত্রে অতিরিক্ত বৈশিষ্ট্য বা কার্যকারিতা প্রদান করে। - Implementor: এটি একটি সাধারণ ইন্টারফেস যা
ConcreteImplementorক্লাস দ্বারা বাস্তবায়িত হয়। এটি কম্পিউটার কোডের কার্যকরী অংশ যা নির্দিষ্ট কাজ করে। - Concrete Implementor: এটি
Implementorইন্টারফেসকে বাস্তবায়িত করে এবং কার্যকরী কোড সরবরাহ করে।
Bridge Pattern এর উদ্দেশ্য
Bridge Pattern ব্যবহার করলে কোডটি নিম্নলিখিত সুবিধা পাবে:
- Independence of Abstraction and Implementation: abstraction এবং implementation একে অপরের থেকে স্বাধীনভাবে পরিবর্তন করা যেতে পারে। যদি আপনি abstraction বা implementation এ পরিবর্তন করতে চান, তবে অন্যটি প্রভাবিত হবে না।
- Improved Flexibility: এর ফলে একে অপরের উপর নির্ভরশীলতা কমে যায়, এবং অ্যাপ্লিকেশনের মধ্যে পরিবর্তন এবং রক্ষণাবেক্ষণ সহজ হয়ে যায়।
Bridge Pattern এর ব্যবহার
- যখন abstraction এবং implementation একে অপরের উপর নির্ভরশীল থাকে, তবে Bridge Pattern ব্যবহার করা হয়।
- যখন আপনি একই abstraction এর জন্য বিভিন্ন types এর implementation তৈরি করতে চান।
- যখন আপনি একটি abstraction স্তরের মধ্যে ডাইনামিকভাবে বিভিন্ন implementation পছন্দ করতে চান।
উদাহরণ: Bridge Pattern in Java
ধরা যাক আমাদের একটি গাড়ির রঙ এবং ধরণের জন্য ব্রিজ প্যাটার্ন তৈরি করতে হবে। এখানে, Vehicle ক্লাস হচ্ছে abstraction এবং Color ক্লাস হচ্ছে implementation। Vehicle এর মধ্যে গাড়ির রঙ নির্ধারণের জন্য Bridge Pattern ব্যবহার করা হবে।
// Implementor Interface
interface Color {
void fillColor();
}
// Concrete Implementor Classes
class Red implements Color {
@Override
public void fillColor() {
System.out.println("Filling color with Red");
}
}
class Blue implements Color {
@Override
public void fillColor() {
System.out.println("Filling color with Blue");
}
}
// Abstraction Class
abstract class Vehicle {
protected Color color;
// Constructor to initialize color
public Vehicle(Color color) {
this.color = color;
}
abstract void manufacture();
}
// Refined Abstraction Classes
class Car extends Vehicle {
public Car(Color color) {
super(color);
}
@Override
void manufacture() {
System.out.print("Manufacturing Car - ");
color.fillColor();
}
}
class Bike extends Vehicle {
public Bike(Color color) {
super(color);
}
@Override
void manufacture() {
System.out.print("Manufacturing Bike - ");
color.fillColor();
}
}
public class BridgePatternExample {
public static void main(String[] args) {
Vehicle redCar = new Car(new Red()); // Car with Red color
Vehicle blueBike = new Bike(new Blue()); // Bike with Blue color
redCar.manufacture(); // Output: Manufacturing Car - Filling color with Red
blueBike.manufacture(); // Output: Manufacturing Bike - Filling color with Blue
}
}
ব্যাখ্যা:
- Color Interface:
Colorইন্টারফেসটি Implementor হিসেবে কাজ করে। এটি রঙের সুনির্দিষ্ট পদ্ধতি fillColor() ডিফাইন করে। - Red and Blue Classes:
RedএবংBlueক্লাসগুলি ConcreteImplementor হিসেবে কাজ করে এবংfillColor()পদ্ধতিটি বাস্তবায়িত করে, যাতে তাদের নিজস্ব রঙ প্রদান করতে পারে। - Vehicle Class:
Vehicleক্লাসটি Abstraction হিসেবে কাজ করে এবংColorঅবজেক্ট গ্রহণ করে। এর মধ্যেmanufacture()পদ্ধতি যা গাড়ির নির্মাণের কাজ করে। - Car and Bike Classes:
CarএবংBikeক্লাসগুলিVehicleএর Refined Abstraction ক্লাস। এগুলিmanufacture()পদ্ধতি নির্দিষ্টভাবে অ্যাডজাস্ট করে।
আউটপুট:
Manufacturing Car - Filling color with Red
Manufacturing Bike - Filling color with Blue
Bridge Pattern এর সুবিধা:
- Decouples abstraction from implementation: এটি abstraction এবং implementation এর মধ্যে একে অপরের ওপর নির্ভরশীলতা দূর করে। ফলে, একে অপরকে পরিবর্তন করা সহজ হয়ে যায়।
- Scalability: নতুন abstraction বা implementation যুক্ত করা সহজ হয়।
- Flexibility: একটি abstraction স্তর বা implementation পরিবর্তন করলে অন্যটি প্রভাবিত হয় না।
Bridge Pattern এর সীমাবদ্ধতা:
- Increased Complexity: সাধারণত, Bridge Pattern প্রয়োগ করলে কোডের জটিলতা বাড়ে কারণ দুটি স্তরের মধ্যে সম্পর্ক স্থাপন করা হয়। ছোট এবং সহজ সমস্যার জন্য এটি অতিরিক্ত জটিলতা সৃষ্টি করতে পারে।
- Extra Classes: ক্লাসের সংখ্যা বাড়ে, কারণ abstraction এবং implementation এর জন্য আলাদা আলাদা ক্লাস তৈরি করতে হয়।
সারাংশ
Bridge Pattern হল একটি structural design pattern যা abstraction এবং implementation এর মধ্যে সম্পর্ক আলাদা করে। এটি দুইটি স্তরের মধ্যে স্বাধীনতা বজায় রাখে এবং তাদের মধ্যে সমন্বয় সহজ করে। Java তে Bridge Pattern এর ব্যবহার বিভিন্ন ক্লাসের মধ্যে পারস্পরিক সম্পর্ক সহজভাবে তৈরি করে এবং কোডের নমনীয়তা বাড়ায়। এই প্যাটার্নটি বিশেষত তখন ব্যবহারযোগ্য যখন একটি সিস্টেমের মধ্যে abstraction এবং implementation পরিবর্তন করা প্রয়োজন, তবে একে অপরের ওপর নির্ভরশীলতা কমানোর জন্য।