ব্রিজ প্যাটার্ন এবং কৌশল প্যাটার্নের মধ্যে পার্থক্য কী?


114

আমি doftery , উইকিপিডিয়া এবং অনেক সাইটে অনেক নিবন্ধ পড়ার চেষ্টা করেছি । ব্রিজ প্যাটার্ন এবং কৌশল প্যাটার্নের মধ্যে পার্থক্য সম্পর্কে আমার কোনও ধারণা নেই।

আমি জানি যে এগুলি উভয়ই এর বাস্তবায়ন থেকে বিমূর্ততা ডিকুয়াল করে এবং রান সময়ে বাস্তবায়ন পরিবর্তন করতে পারে।

তবে আমি এখনও জানি না কোন পরিস্থিতিতে আমার কৌশল ব্যবহার করা উচিত বা কোন পরিস্থিতিতে আমার সেতু ব্যবহার করা উচিত।

উত্তর:


66

শব্দার্থবিদ্যা। উইকিপিডিয়া থেকে :

কৌশল প্যাটার্নের জন্য ইউএমএল বর্গের চিত্রটি সেতুর প্যাটার্নের জন্য চিত্রের মতো as যাইহোক, এই দুটি ডিজাইনের ধরণগুলি তাদের অভিপ্রায় অনুসারে এক নয়। কৌশল প্যাটার্নটি আচরণের জন্য বোঝানো হলেও ব্রিজ প্যাটার্নটি কাঠামোর জন্য বোঝানো হয়েছে।

প্রসঙ্গ এবং কৌশলগুলির মধ্যে সংযোগ বিমূর্তকরণ এবং ব্রিজ প্যাটার্নটিতে প্রয়োগের মধ্যে সংযোগের চেয়ে আরও শক্ত।

আমি এটি বুঝতে পেরেছি, আপনি যখন বাহ্যিক উত্স থেকে সরবরাহ করা যেতে পারে এমন আচরণের বিমূর্ত ব্যবহার করছেন তখন আপনি কৌশল প্যাটার্নটি ব্যবহার করছেন (যেমন, কনফিগারেশনটি কিছু প্লাগইন সমাবেশ লোড করার জন্য নির্দিষ্ট করতে পারে), এবং আপনি যখন ব্রিজ প্যাটার্ন ব্যবহার করছেন তখন ব্যবহার করছেন আপনার কোডটি কিছুটা আরও সুন্দর তৈরি করার জন্য একইগুলি। আসল কোডটি দেখতে খুব একই রকম দেখাবে - আপনি কিছুটা ভিন্ন কারণে কেবল নিদর্শনগুলি প্রয়োগ করছেন ।


3
সুতরাং আমি কী বলতে পারি যে আমি ব্রিজ প্যাটার্নের মতো কোডটিকে আরও নিখরচর করে তুলতে গিয়ে বিমূর্ত আচরণ করতে সক্ষম হয়ে কৌশল প্যাটার্নটি ব্যবহার করছি .. বা, কোডটি আরও সুন্দর করার জন্য আমি ব্রিজ প্যাটার্নটি ব্যবহার করছি এবং কারণ এটি আমার অনুমতি দেয় কৌশল প্যাটার্ন মত বিমূর্ত আচরণ? এবং আমি ঠিক হতে হবে?
ব্যবহারকারী 20358

1
দুজনের মধ্যে পার্থক্য কেবল তাদের অভিপ্রায় অনুসারে। সুতরাং আমি অনুমান করি যে আমরা নিরাপদে এটি বলতে পারি, কারণ উভয়ই একই ধারণা ব্যবহার করে এবং একই নমনীয়তার প্রস্তাব দেয়, দুটি প্যাটার্ন কার্যত একই।
এলজ

3
ব্রিজের ইউএমএল আমার জিওএফ বইয়ের অনুলিপিটিতে একেবারেই আলাদাএই সরঞ্জামটি কৌশল থেকে ব্রিজের পার্থক্য করতে সক্ষম।
ফুহরম্যানেটর

1
উইকিপিডিয়া প্রায়শই একটি ভয়ানক রেফারেন্স হয়। ঠিক আছে, সেই ভুল তথ্যটি পৃষ্ঠা থেকে সরানো হয়েছিল। en.wikipedia.org/w/...
Fuhrmanator

2
আমি যেভাবে পেলাম তা হ'ল একই কৌশলটি বাস্তবায়নের (কৌশল) বিমূর্ত করতে বা একটি ইন্টারফেস (ব্রিজ) বিমূর্ত করতে ব্যবহৃত হয়। কৌশলটি আচরণের অদলবদল করে, ব্রিজ অদলবদল করে ইন্টারফেসগুলি (এটি শেষ পর্যন্ত এ জাতীয় ইন্টারফেসের সাথে বাস্তবায়নগুলিকে সোয়াপ করার অনুমতি দেয়)। অন্য কথায় ব্রিজ একদিকে মানসম্মত ইন্টারফেস তৈরি করে এবং অন্যদিকে বিভিন্ন ইন্টারফেসের সাথে প্রয়োগগুলি প্লাগ করে।
নিকাসাস

55

ব্রিজ প্যাটার্নটি একটি কাঠামোগত প্যাটার্ন (আপনি কীভাবে একটি সফ্টওয়্যার সামগ্রী তৈরি করবেন?)। কৌশল প্যাটার্ন একটি গতিশীল প্যাটার্ন (আপনি কীভাবে সফ্টওয়্যারটিতে কোনও আচরণ চালাতে চান?)।

বাক্য গঠনটি একই রকম তবে লক্ষ্যগুলি পৃথক:

  • কৌশল : আপনার কাছে অপারেশন করার আরও উপায় রয়েছে; কৌশলের সাহায্যে আপনি রান-টাইমে অ্যালগরিদম চয়ন করতে পারেন এবং সংকলন সময়ে আপনি অনেকগুলি পার্শ্ব-প্রতিক্রিয়া ছাড়াই একটি কৌশল পরিবর্তন করতে পারেন;
  • ব্রিজ : আপনি ইন্টারফেস এবং শ্রেণীর শ্রেণিবিন্যাসকে বিভক্ত করতে পারেন, বিমূর্ত রেফারেন্সের সাথে এটিতে যোগ দিতে পারেন ( ব্যাখ্যা দেখুন )

3
সুতরাং সিনট্যাক্সটি যদি অনুরূপ হয় তবে আমি কি সঠিকভাবে বলব যে আমি কোনও ধরণের সফ্টওয়্যার আচরণ চালাতে এই ধরণের দুটি ব্যবহার করছি এবং কারণ আমি সেই ফ্যাশনে উপাদানটি তৈরি করতে চাই তাই এটি পরিষ্কারও দেখা যাচ্ছে?
ব্যবহারকারী 20358

11

কৌশল:

  • কৌশলটির সাথে আবদ্ধ প্রসঙ্গ: প্রসঙ্গের শ্রেণি (সম্ভবত বিমূর্ত তবে সত্যিকার অর্থে কোনও ইন্টারফেস নয়! আপনি যেমন একটি নির্দিষ্ট আচরণকে সজ্জিত করতে চান এবং পুরো প্রয়োগটি নয়) কৌশল কৌশল ইন্টারফেসের রেফারেন্স এবং কৌশল প্রয়োগের জন্য অনুরোধটি প্রয়োগ করতে পারে / তা জানতে পারে এটা।
  • উদ্দেশ্যটি রানটাইমের সময় আচরণের অদলবদল করার ক্ষমতা

    class Context {
    
         IStrategy strategyReference;
    
         void strategicBehaviour() {
    
            strategyReference.behave();
         }
    
    }
    

সেতু

  • বাস্তবায়নটির সাথে আবদ্ধ না থাকে বিমূর্ততা: বিমূর্ততা ইন্টারফেস (বা বেশিরভাগ আচরণের বিমূর্তের সাথে বিমূর্ত শ্রেণি) বাস্তবায়ন ইন্টারফেসের রেফারেন্স জানতে / ধারণ করতে পারে না
  • উদ্দেশ্য বাস্তবায়ন থেকে বিমূর্তি সম্পূর্ণরূপে দ্বিগুণ করা হয়

    interface IAbstraction {
    
        void behaviour1();
    
        .....
    
    }
    
    interface IImplementation {
    
         void behave1();
    
         void behave2();
    
         .....
    
    }
    
    class ConcreteAbstraction1 implements IAbstraction {
    
          IImplementation implmentReference;
    
          ConcreteAbstraction1() {
    
               implmentReference = new ImplementationA() // Some implementation
    
          }
    
          void behaviour1() {
    
                implmentReference.behave1();
    
          }
    
          .............
    
    }
    
    class ConcreteAbstraction2 implements IAbstraction {
    
          IImplementation implmentReference;
    
          ConcreteAbstraction1() {
    
               implmentReference = new ImplementationB() // Some Other implementation
    
          }
    
          void behaviour1() {
    
                implmentReference.behave2();
    
          }
    
          .............
    
    }
    

10

আমিও একই ভাবছিলাম, তবে সম্প্রতি আমাকে সেতুটি ব্যবহার করতে হবে এবং বুঝতে পেরেছিলাম যে সেতু কৌশল ব্যবহার করছে এবং প্রসঙ্গে বিমূর্ততা যুক্ত করছে যাতে আপনি পরে ক্লায়েন্টটি পরিবর্তন না করে আরও পরিবর্তন আনতে পারেন। বিমূর্ততা ছাড়াই কৌশল ব্যবহার করার সময় নকশাটি নমনীয় নয় এবং পরে ক্লায়েন্টের পরিবর্তনের প্রয়োজন হতে পারে। তবে পুরো ব্রিজটি ব্যবহার করার সময় ডিজাইনটি আরও নমনীয় হয়ে যায়। কৌশল থেকে ব্রিজে যাওয়া কীভাবে আরও নমনীয়তা দেয় তা আপনি এখানে দেখতে পারবেন। এছাড়াও আমরা ধরে নিই যে এখন "ভিসা" এবং "মাস্টার" কেবল কার্ডগুলিতেই নয় ফোন এবং চিপগুলিতেও উপলব্ধ; এবং যদি আমরা সেতু ব্যবহার করি তবে এই সমর্থনটি যুক্ত করা আরও সহজ।

কৌশল ভিএস ব্রিজ


9

সেতু : (একটি কাঠামোগত নিদর্শন)

ব্রিজ প্যাটার্ন বিমূর্তি এবং প্রয়োগকে ডিকম্পল করে এবং উভয়কে স্বতন্ত্রভাবে পৃথক হতে দেয়।

এই নিদর্শনটি ব্যবহার করুন যখন:

  1. সংকলনের সময় বিমূর্ততা এবং বাস্তবায়নের সিদ্ধান্ত নেওয়া হয়নি
  2. বিমূর্ততা এবং প্রয়োগগুলি স্বাধীনভাবে পরিবর্তন করা উচিত
  3. বিমূর্তকরণ বাস্তবায়নের পরিবর্তনগুলি কলার অ্যাপ্লিকেশনটিকে প্রভাবিত করবে না
  4. ক্লায়েন্টকে প্রয়োগের বিশদ থেকে উত্তাপিত করা উচিত।

কৌশল: (আচরণের ধরণ)

কৌশল নিদর্শন আপনাকে রান সময়ে অ্যালগরিদমের পরিবার থেকে একাধিক অ্যালগরিদমের মধ্যে স্যুইচ করতে সক্ষম করে।

কৌশল প্যাটার্ন ব্যবহার করুন যখন:

  1. অ্যালগরিদমের একাধিক সংস্করণ প্রয়োজন
  2. ক্লাসের আচরণ রানের সময়ে পরিবর্তনশীল হতে হবে
  3. শর্তাধীন বিবৃতি এড়িয়ে চলুন

সম্পর্কিত পোস্ট:

আপনি কখন ব্রিজ প্যাটার্ন ব্যবহার করবেন? এটি অ্যাডাপ্টারের প্যাটার্ন থেকে কীভাবে আলাদা?

কৌশল প্যাটার্ন রিয়েল ওয়ার্ল্ড উদাহরণ


4

নকশা নকশা ধরণ

  • আচরণগত: নিদর্শনগুলি শ্রেণি বা অবজেক্টগুলির মধ্যে মিথস্ক্রিয়া এবং দায়িত্ব বন্টন করার উপায়গুলি বৈশিষ্ট্যযুক্ত করে
  • কাঠামোগত: নিদর্শনগুলি শ্রেণি বা বস্তুর সমন্বয়ে কাজ করে।
  • সৃষ্টিশীল: নিদর্শনগুলি বস্তু তৈরির প্রক্রিয়া সম্পর্কে উদ্বিগ্ন।

সেতু (কাঠামোগত)

এর বাস্তবায়ন থেকে কোনও বিমূর্তি ডিকুয়াল করুন যাতে প্রতিটি পৃথক হতে পারে। স্বাধীনভাবে। এখানে চিত্র বর্ণনা লিখুন

রিমোট নিন। রিমোটটিতে বোতাম রয়েছে 1-6। এটি উপরের চিত্রের কংক্রিট শ্রেণি। রিমোটটি টিভি বা ডিভিডি ব্যবহার করা হয় কিনা তার উপর নির্ভর করে প্রতিটি বোতাম ভিন্নভাবে কাজ করবে। প্রতিটি বোতামের কার্যকারিতা প্রয়োগকারী ইন্টারফেস দ্বারা বাস্তবায়ন থেকে বিমূর্ত হয়।

এটি আমাদের প্রতিটি ডিভাইসের জন্য রিমোট কীভাবে কাজ করবে তা পরিবর্তন করতে দেয়।

কৌশল (আচরণগত)

অ্যালগরিদমগুলির একটি পরিবারকে সংজ্ঞায়িত করুন, প্রত্যেককে আবদ্ধ করুন এবং তাদেরকে বিনিময়যোগ্য করুন। এখানে চিত্র বর্ণনা লিখুন

কৌশল হিসাবে, আমরা যদি দূরবর্তী দৃশ্যের দিকে তাকিয়ে থাকতাম। "রাজ্য" হ'ল সম্পূর্ণ দূরবর্তী যা আমরা প্রসঙ্গের রাজ্যের রেফারেন্স পরিবর্তন করে পরিবর্তন করি। "কংক্রিটস্টেটএ" (টিভি রিমোট) "কংক্রিটস্টেটবি" (ডিভিডি রিমোট)।

অতিরিক্ত পড়া:


3
  1. কৌশল প্যাটার্ন আচরণগত সিদ্ধান্তের জন্য ব্যবহৃত হয়, এবং ব্রিজ প্যাটার্ন কাঠামোগত সিদ্ধান্তের জন্য ব্যবহৃত হয়।

  2. ব্রিগেড প্যাটার্ন প্রয়োগের বিবরণ থেকে বিমূর্ত উপাদানগুলিকে পৃথক করে, যখন কৌশল প্যাটার্নটি অ্যালগরিদমকে আরও বিনিময়যোগ্য করে তোলার বিষয়ে উদ্বিগ্ন।

ইউএমএলে কৌশল প্যাটার্ন

ইউএমএলে ব্রিগেড প্যাটার্ন

সুইফটে কৌশল প্যাটার্ন:

protocol PrintStrategy {
   func print(_ string: String) -> String
}

class Printer {
   let strategy: PrintStrategy

   init(strategy: PrintStrategy) {
      self.strategy = strategy
    }

  func print(_ string: String) -> String {
     return self.strategy.print(string)
  }
}

class UpperCaseStrategy: PrintStrategy {
    internal func print(_ string: String) -> String {
        return string.uppercased()
    }
}

class LowerCaseStrategy: PrintStrategy {
    internal func print(_ string: String) -> String {
        return string.lowercased()
    }
}

var lower = Printer(strategy: LowerCaseStrategy())
lower.print("I love Software Patterns")

var upper = Printer(strategy: UpperCaseStrategy())
upper.print("I love Software Patterns")

সুইগে ব্রিগেড প্যাটার্ন:

protocol Appliance {
   func run()
}

protocol Switch {
   let appliance: Appliance {get set}
   func turnOn()
}

class RemoteControl: Switch {
   var appliance: Appliance

   init(appliance: Appliance) {
       self.appliance = appliance
   }

   internal func turnOn() {
      appliance.run()
   }
}

class TV: Appliance {
   internal func run() {
      print("TV is ON")
   }
}

class Stereo: Appliance {
   internal func run() {
      print("Stereo is ON")
   }
}

var tvRemote = RemoteControl.init(appliance: TV())
tvRemote.turnOn()

var stereoRemote = RemoteControl.init(appliance: Stereo())
stereoRemote.turnOn()

কীভাবে কেবল কৌশল প্যাটার্ন আসে তা আরও "ইন্টারচেঞ্জযোগ্য"। যেহেতু আমরা ইন্টারফেসকে কোড প্রয়োগ করি, বাস্তবায়নের উদ্দেশ্যে নয়, আমরা আপনার কোড উদাহরণে যেমন দেখিয়েছি, তেমন অদলবদল Stereoকরে TVএবং কোডটি কার্যকরভাবে কার্যকর হয় আমরা কৌশলগুলি বা সেতুতে প্রয়োগগুলি অদলবদল করতে পারি ।
অস্বীকার 631

2

উইকোডেজেভাফরফুডের উত্তরে যুক্ত করা, তারা বাস্তবায়নের ক্ষেত্রে একই হতে পারে। তবে আপনি কৌশল বাছাইয়ের মতো কৌশলগুলি অদলবদল করার জন্য কৌশল ব্যবহার করেন, যখন আপনি দুটি বস্তুর ডেটাবেস র‌্যাপার এবং একটি নেটওয়ার্ক অ্যাডাপ্টারের প্রয়োগগুলি ব্রিজ করতে ব্যবহার করেন যাতে ক্লায়েন্ট কোড হয় একই API এর বিপরীতে কাজ করতে পারে। নামকরণ আসলে এটি সব বলে


1

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

কৌশল প্যাটার্নের জন্য ইউএমএল বর্গের চিত্রটি সেতুর প্যাটার্নের জন্য চিত্রের মতো as যাইহোক, এই দুটি ডিজাইনের ধরণগুলি তাদের অভিপ্রায় অনুসারে এক নয়। কৌশল প্যাটার্নটি আচরণের জন্য বোঝানো হলেও ব্রিজ প্যাটার্নটি কাঠামোর জন্য বোঝানো হয়েছে।

প্রসঙ্গ এবং কৌশলগুলির মধ্যে সংযোগ বিমূর্তকরণ এবং ব্রিজ প্যাটার্নটিতে প্রয়োগের মধ্যে সংযোগের চেয়ে আরও শক্ত।


আপনি শেষ বাক্যাংশ বিস্তারিত বলতে পারেন?
gstackoverflow

1

প্যাটার্ন তুলনা (অভিপ্রায়টির পার্থক্য, ...) সম্পর্কে ইতিমধ্যে যা বলা হয়েছে তার সাথে যুক্ত করতে: ব্রিজ প্যাটার্নটিও বিমূর্তভাবে শ্রেণিবিন্যাসের পার্থক্য পরিবর্তনের জন্য ইচ্ছাকৃতভাবে কাঠামোযুক্ত। সি # এর মতো ভাষায় এর দ্বারা বোঝানো যেতে পারে যে আপনার একটি বিমূর্ততা বেস রয়েছে যার মধ্যে ভার্চুয়াল পদ্ধতি রয়েছে যার ফলে বিদ্যমান ভোক্তাদের জন্য সমস্যা না ঘটায় এমন উদ্দেশ্যে পরিবর্তিত হওয়ার অনুমতি দেওয়া যায়। এটি ব্যতীত দুটি প্যাটার্ন বেশিরভাগ অংশের জন্য অভিন্ন প্রদর্শিত হতে পারে।


1

আপনি রান সময়ে যখন অ্যালগরিদম বা কৌশল প্লাগ করতে চান তখন কৌশল প্যাটার্ন ব্যবহার করা হয়। বিভাগের ধরণটিও বোঝায় যে এটি বস্তুর আচরণের সাথে সম্পর্কিত। অন্যদিকে ব্রিজটি স্ট্রাকচারাল প্যাটার্ন এবং অবজেক্টগুলির স্ট্রাকচারাল হায়ারার্কির সাথে সম্পর্কিত। এটি তাদের মধ্যে একটি পরিমার্জনীয় বিমূর্ততা প্রবর্তন করে বাস্তবায়ন থেকে বিমূর্ততাটিকে ডিউপলস করে। সংশোধিত বিমূর্ততা রান টাইম কৌশল প্লাগ করা (কৌশল প্যাটার্নে) সাথে বিভ্রান্ত হতে পারে। ব্রিজ প্যাটার্ন কাঠামোগত দিকগুলির সাথে সম্পর্কিত করে N সংখ্যা বর্গ তৈরি এড়াতে একটি ব্যবস্থা সরবরাহ করে।


1

কৌশল প্যাটার্নের জন্য কেবল প্রয়োগটি পরিবর্তিত হয়।

মনে করুন, ক্লাস এ ক্লাস বি ব্যবহার করছে যার একাধিক বাস্তবায়ন উপলব্ধ। সুতরাং সেই ক্ষেত্রে বি রানটাইমের সময় সরবরাহিত প্রকৃত বাস্তবায়ন সহ বিমূর্ত হবে। এটি কৌশল প্যাটার্ন

এখন যদি নিজেই বিমূর্ত হয়। এ এবং বি উভয়ই পৃথক হতে পারে। আপনি ব্রিজ প্যাটার্ন ব্যবহার করবেন।


0

আমি মনে করি যে তারা যে প্রসঙ্গে ব্যবহৃত হচ্ছে সে ক্ষেত্রে তাদের মধ্যে সামান্য পার্থক্য রয়েছে।

আমি পৃথক orthogonal ধারণাগুলি পৃথক করতে সেতুর প্যাটার্নটি ব্যবহার করি যা এগুলি উভয়ই একটি বৃহত্তর - এটি স্বাধীনভাবে পরিবর্তিত হতে দেয়। এটিতে একাধিক বিমূর্ততা জড়িত।

আইএমও, কৌশল বিন্যাসটি সহজ বা আরও সমতল। এটি ওসিপিকে নিশ্চিতভাবে পরিবেশন করে তবে ব্রিজ প্যাটার্নের মতো অন্য এবং বৃহত্তর ধারণার অংশ হওয়ার জন্য অগত্যা নয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.