CodeGym /Java Blog /এলোমেলো /ব্রিজ ডিজাইন প্যাটার্ন
John Squirrels
লেভেল 41
San Francisco

ব্রিজ ডিজাইন প্যাটার্ন

এলোমেলো দলে প্রকাশিত
ওহে! আমরা এখন একটি বিস্তৃত এবং অতি গুরুত্বপূর্ণ উপযোগী বিষয়ের সন্ধান চালিয়ে যাচ্ছি: ডিজাইন প্যাটার্ন। আজ ব্রিজ প্যাটার্ন নিয়ে কথা বলা যাক। অন্যান্য নিদর্শনগুলির মতো, ব্রিজ প্যাটার্নটি সফ্টওয়্যার আর্কিটেকচার ডিজাইন করার সময় একজন বিকাশকারীর মুখোমুখি হওয়া সাধারণ সমস্যাগুলি সমাধান করতে কাজ করে। আজ আসুন এই প্যাটার্নের বৈশিষ্ট্যগুলি অধ্যয়ন করি এবং এটি কীভাবে ব্যবহার করবেন তা খুঁজে বের করি।

সেতু প্যাটার্ন কি?

সেতু প্যাটার্ন একটি কাঠামোগত নকশা প্যাটার্ন. অন্য কথায়, এর প্রধান কাজ ক্লাস এবং অবজেক্টের বাইরে একটি পূর্ণাঙ্গ কাঠামো তৈরি করা। একটি সেতু এক বা একাধিক শ্রেণীকে পৃথক শ্রেণীবিভাগে বিভক্ত করে এটি করে: বিমূর্তকরণ এবং বাস্তবায়ন । একটি অনুক্রমের কার্যকারিতার পরিবর্তন অন্যটিতে পরিবর্তন আনতে বাধ্য নয়। এটি সব সূক্ষ্ম এবং ভাল, কিন্তু এই সংজ্ঞাটি খুব বিস্তৃত এবং সবচেয়ে গুরুত্বপূর্ণ প্রশ্নের উত্তর দেয় না: "সেতু প্যাটার্ন কি?" আমি মনে করি আপনার জন্য এর ব্যবহারিক প্রয়োগ বুঝতে সহজ হবে। তাই সরাসরি, ব্রিজ প্যাটার্নের জন্য একটি ক্লাসিক দৃশ্য তৈরি করা যাক। আমাদের একটি বিমূর্ত Shapeশ্রেণী রয়েছে, যা একটি জেনেরিক জ্যামিতিক চিত্র উপস্থাপন করে:
  • আকৃতি.জাভা

    
    public abstract class Shape {
       public abstract void draw();
    }
    

    যখন আমরা ত্রিভুজ এবং আয়তক্ষেত্রের মতো আকারগুলি যোগ করার সিদ্ধান্ত নিয়েছি, তখন আমরা তাদের ক্লাসের উত্তরাধিকারী করব Shape:

  • Rectangle.java:

    
    public class Rectangle extends Shape {
       @Override
       public void draw() {
           System.out.println("Drawing rectangle");
       }
    }
    
  • Triangle.java:

    
    public class Triangle extends Shape {
       @Override
       public void draw() {
           System.out.println("Drawing triangle");
       }
    }
    
যতক্ষণ না আমরা রঙের ধারণাটি প্রবর্তন করি ততক্ষণ পর্যন্ত সবকিছুই সহজ দেখায়। অর্থাৎ, প্রতিটি আকৃতির নিজস্ব রঙ থাকবে এবং পদ্ধতির কার্যকারিতা draw()এই রঙের উপর নির্ভর করবে। পদ্ধতির বিভিন্ন বাস্তবায়নের জন্য draw(), তারপর আমাদের প্রতিটি আকৃতি-রঙের সমন্বয়ের জন্য একটি শ্রেণী তৈরি করতে হবে। যদি আমাদের তিনটি রঙ থাকে, তাহলে আমাদের ছয়টি শ্রেণির প্রয়োজন: TriangleBlack, TriangleGreen, TriangleRed, RectangleBlack, RectangleGreenএবং RectangleRed. ছয়টি ক্লাস এত বড় সমস্যা নয়। কিন্তু! যদি আমাদের একটি নতুন আকৃতি বা রঙ যোগ করতে হয়, তাহলে ক্লাসের সংখ্যা দ্রুতগতিতে বৃদ্ধি পায়। এই অবস্থা থেকে কিভাবে বের হওয়া যায়? একটি ক্ষেত্রে রঙ সংরক্ষণ করা এবং শর্তসাপেক্ষ বিবৃতি ব্যবহার করে সমস্ত বিকল্প গণনা করা সেরা সমাধান নয়। একটি ভাল সমাধান হল একটি পৃথক ইন্টারফেসে রঙ সরানো. যত তাড়াতাড়ি বলা হয়ে গেছে: আসুন Colorতিনটি বাস্তবায়নের সাথে একটি ইন্টারফেস তৈরি করি: BlackColor, GreenColorএবং RedColor:
  • Color.java:

    
    public interface Color {
       void fillColor();
    }
    
  • BlackColor.java:

    
    public class BlackColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in black color");
       }
    }
    
  • GreenColor.java

    
    public class GreenColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in green color");
       }
    }
    
  • RedColor.java

    
    public class RedColor implements Color {
       @Override
       public void fillColor() {
           System.out.println("Filling in red color");
       }
    }
    

    এখন আমরা ক্লাসে একটি Colorক্ষেত্র যোগ করি Shape। আমরা কনস্ট্রাক্টরে এর মান পাব।

  • Shape.java:

    
    public abstract class Shape {
       protected Color color;
      
       public Shape(Color color) {
           this.color = color;
       }
    
       public abstract void draw();
    }
    

    colorআমরা বাস্তবায়নে ভেরিয়েবল ব্যবহার করব Shape। এর মানে হল যে আকারগুলি এখন ইন্টারফেসের কার্যকারিতা ব্যবহার করতে পারে Color

  • আয়তক্ষেত্র.জাভা

    
    public class Rectangle extends Shape {
    
       public Rectangle(Color color) {
           super(color);
       }
    
       @Override
       public void draw() {
           System.out.println("Drawing rectangle");
           color.fillColor();
       }
    }
    
তা-দা! এখন আমরা বিভিন্ন রঙ এবং আকার বিজ্ঞাপন অসীম তৈরি করতে পারি, এবং ক্লাসের সংখ্যা শুধুমাত্র রৈখিকভাবে বৃদ্ধি পাবে। ক্ষেত্রটি Color colorএকটি সেতু যা দুটি পৃথক শ্রেণির শ্রেণিবিন্যাসকে সংযুক্ত করে।

কীভাবে একটি সেতু তৈরি করবেন: বিমূর্ততা এবং বাস্তবায়ন

আসুন একটি ক্লাস ডায়াগ্রাম দেখি যা সেতুর প্যাটার্নটি চিত্রিত করে: ব্রিজ ডিজাইন প্যাটার্ন প্রবর্তন - 2এখানে আপনি দুটি স্বাধীন কাঠামো দেখতে পাবেন যা একে অপরের কার্যকারিতা প্রভাবিত না করেই পরিবর্তন করা যেতে পারে। আমাদের ক্ষেত্রে:
  • বিমূর্ততা হল Shapeক্লাস
  • RefinedAbstraction হল Triangleএবং Rectangleক্লাস
  • ইমপ্লিমেন্টর হল Colorইন্টারফেস
  • ConcreteImplementor হল BlackColor, GreenColorএবং RedColorক্লাস।
ক্লাস Shapeহল একটি বিমূর্ততা — বিভিন্ন রং দিয়ে আকৃতির ভরাট পরিচালনা করার জন্য একটি প্রক্রিয়া, যা ইন্টারফেসে Color(ইমপ্লিমেন্টর) প্রতিনিধিত্ব করে। এবং ক্লাসগুলি হল কংক্রিট Triangleক্লাস Rectangleযা ক্লাস দ্বারা উপলব্ধ প্রক্রিয়া ব্যবহার করে ShapeBlackColor, GreenColorএবং RedColorবাস্তবায়ন শ্রেণীবিন্যাস মধ্যে কংক্রিট বাস্তবায়ন হয়.

যেখানে ব্রিজ প্যাটার্ন ব্যবহার করবেন

এই প্যাটার্নটি ব্যবহার করার একটি বিশাল সুবিধা হল যে আপনি অন্যটির যুক্তি না ভেঙে একটি অনুক্রমের কার্যকরী ক্লাসে পরিবর্তন করতে পারেন। এছাড়াও, এই পদ্ধতিটি ক্লাসের মধ্যে কাপলিং কমাতে সাহায্য করে। এই প্যাটার্নটি ব্যবহার করার সময় প্রধান প্রয়োজনীয়তা হল "নির্দেশগুলি অনুসরণ করুন" - তাদের কাউকে উপেক্ষা করবেন না! সেই লক্ষ্যে, আসুন পরিস্থিতিগুলি বের করি যখন আপনার অবশ্যই ব্রিজ প্যাটার্নটি ব্যবহার করা উচিত:
  1. আপনি যদি দুটি ধারণার (যেমন আকার এবং রঙ) সমন্বয়ের উপর ভিত্তি করে সত্তার সংখ্যা প্রসারিত করতে চান।

  2. আপনি যদি এমন একটি বড় শ্রেণীকে ভাগ করতে চান যা একক-দায়িত্বের নীতি পূরণ করে না এমন ছোট শ্রেণীতে যেগুলির কার্যকারিতা রয়েছে।

  3. প্রোগ্রামটি চলাকালীন নির্দিষ্ট সত্তার যুক্তিতে পরিবর্তন করার প্রয়োজন হলে।

  4. যদি ক্লাস বা লাইব্রেরির ক্লায়েন্টদের কাছ থেকে একটি বাস্তবায়ন লুকানোর প্রয়োজন হয়।

আপনি যখন এই প্যাটার্নটি ব্যবহার করেন, সর্বদা মনে রাখবেন যে এটি আপনার কোডে অতিরিক্ত সত্তা যুক্ত করে — এটি এমন একটি প্রকল্পে ব্যবহার করার অর্থ নাও হতে পারে যেখানে শুধুমাত্র একটি আকৃতি এবং একটি বা দুটি সম্ভাব্য রঙ রয়েছে৷

প্যাটার্নের সুবিধা এবং অসুবিধা

অন্যান্য নিদর্শনগুলির মতো, একটি সেতুর সুবিধা এবং অসুবিধা উভয়ই রয়েছে। সেতু প্যাটার্নের সুবিধা:
  1. এটি কোডের মাপযোগ্যতা উন্নত করে — আপনি প্রোগ্রামের অন্য অংশে কিছু ভাঙার ভয় ছাড়াই কার্যকারিতা যোগ করতে পারেন।
  2. এটি উপশ্রেণির সংখ্যা হ্রাস করে যখন সত্তার সংখ্যা অন্যথায় দুটি ধারণার সংমিশ্রণের উপর ভিত্তি করে (উদাহরণস্বরূপ, আকার এবং রঙ)।
  3. এটি পৃথকভাবে দুটি পৃথক শ্রেণিবিন্যাসের উপর কাজ করা সম্ভব করে - বিমূর্তকরণ এবং বাস্তবায়ন। দুটি ভিন্ন বিকাশকারী একে অপরের কোডের বিশদ বিবরণ না জেনে পরিবর্তন করতে পারে।
  4. এটি ক্লাসের মধ্যে সংযোগ কমিয়ে দেয় — একমাত্র জায়গা যেখানে দুটি শ্রেণী একত্রিত হয় সেটি হল সেতু (অর্থাৎ ক্ষেত্র Color color)।
সেতু প্যাটার্নের অসুবিধা:
  1. নির্দিষ্ট পরিস্থিতি এবং একটি প্রকল্পের সামগ্রিক কাঠামোর উপর নির্ভর করে, এটি একটি প্রোগ্রামের কর্মক্ষমতাকে নেতিবাচকভাবে প্রভাবিত করতে পারে (উদাহরণস্বরূপ, যদি আপনাকে আরও অবজেক্ট শুরু করতে হয়)।
  2. দুটি শ্রেণীর মধ্যে স্যুইচ করার প্রয়োজনের কারণে এটি কোডকে কম পাঠযোগ্য করে তোলে।

কৌশল প্যাটার্ন থেকে পার্থক্য

ব্রিজ প্যাটার্নটি প্রায়শই অন্য ডিজাইনের প্যাটার্নের সাথে বিভ্রান্ত হয় - কৌশল। তারা উভয়ই রচনা ব্যবহার করে (যদিও আমরা চিত্র এবং রঙের সাথে উদাহরণে একত্রীকরণ ব্যবহার করেছি, ব্রিজ প্যাটার্নটিও রচনা ব্যবহার করতে পারে), অন্য বস্তুর কাছে কাজ অর্পণ করে। কিন্তু তাদের মধ্যে পার্থক্য আছে, এবং তা বিশাল। কৌশল প্যাটার্ন একটি আচরণগত প্যাটার্ন: এটি সম্পূর্ণ ভিন্ন সমস্যার সমাধান করে। কৌশলটি অ্যালগরিদমগুলিকে আদান-প্রদান করতে দেয়, যখন সেতু বিভিন্ন বাস্তবায়নের মধ্যে নির্বাচন করার জন্য বাস্তবায়ন থেকে একটি বিমূর্ততাকে আলাদা করে। অন্য কথায়, একটি কৌশলের বিপরীতে, একটি সেতু সমগ্র সত্তা বা শ্রেণিবদ্ধ কাঠামোর ক্ষেত্রে প্রযোজ্য। ব্রিজ প্যাটার্ন একটি বিকাশকারীর অস্ত্রাগারে একটি ভাল অস্ত্র হতে পারে। প্রধান জিনিসটি এমন পরিস্থিতিতে সনাক্ত করা যেখানে এটি ব্যবহার করা মূল্যবান এবং অন্য কোন প্যাটার্ন উপযুক্ত হলে তা সনাক্ত করা।
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION