মধ্যস্থতা বনাম পর্যবেক্ষক?


27

কেউ কি আমাকে একটি Observerএবং ক এর মধ্যে পার্থক্যের উপর এক প্রাসঙ্গিক উত্তর দিতে পারে এবং Mediatorআপনি অন্যটির তুলনায় কখন একটি প্যাটার্ন ব্যবহার করবেন তার সংক্ষিপ্তসার সরবরাহ করতে পারেন?

কোন ধরণের পরিস্থিতি কোনটির জন্য প্রয়োজন Observerএবং কোন ধরণের কী প্রয়োজন তা সম্পর্কে আমি অনিশ্চিতMediator


আমি এই সম্পর্কে আপনার নিজের ধারণা জানতে চান 7 বছর পরে?
নিং

উত্তর:


19

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

এমন অনেকগুলি ক্ষেত্রে রয়েছে যখন আপনি পর্যবেক্ষক প্যাটার্নটি ব্যবহার করতে চান, তারা কী হ'ল অবজেক্টটিতে অন্য অবজেক্টের কী অবস্থা তা পর্যবেক্ষণ করছে তা জানা উচিত নয়।

মধ্যস্থতা কিছুটা সুনির্দিষ্ট, এটি কোনও মধ্যস্থতার মাধ্যমে ক্লাস সরাসরি যোগাযোগ করা এড়িয়ে যায়। এটি কেবলমাত্র পরিচালনা করে এমন একটি শ্রেণিতে যোগাযোগকে অফলোড করার অনুমতি দেওয়ার মাধ্যমে একক দায়িত্বের নীতিটিকে সহায়তা করে।

একটি ক্লাসিক মধ্যস্থতার উদাহরণ একটি জিইউআইতে রয়েছে, যেখানে নিষ্ক্রিয় পদ্ধতির বোতাম ক্লিক ইভেন্টে কোড আসতে পারে "যদি ফু প্যানেলটি অক্ষম থাকে এবং বার প্যানেলে" দয়া করে তারিখ লিখুন "বলে একটি লেবেল থাকে তবে সার্ভারটি কল করবেন না, অন্যথায় এগিয়ে যান ", যেখানে মধ্যস্থতার প্যাটার্নের সাহায্যে এটি বলতে পারে" আমি কেবল একটি বোতাম এবং ফু প্যানেল এবং বার প্যানেলে লেবেল সম্পর্কে জানার কোনও পার্থিব ব্যবসা নেই, তাই সার্ভারকে কল করলে আমি কেবল আমার মধ্যস্থকে জিজ্ঞাসা করব এখনই ঠিক আছে। "

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


ধন্যবাদ, আপনার উদাহরণগুলি সত্যই আমার পক্ষে দুজনের মধ্যে পার্থক্য পরিষ্কার করতে সহায়তা করেছিল। যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি তবে পর্যবেক্ষক প্যাটার্নটি যোগাযোগের জন্য বার্তাগুলির সাবস্ক্রাইব / ব্রডকাস্ট সিস্টেম ব্যবহার করে, যখন মধ্যস্থতাকারী কিছু বিশ্বব্যাপী অ্যাক্সেসযোগ্য সত্তার মতো যা অবজেক্টগুলি তথ্যের জন্য জিজ্ঞাসা করতে পারে।
রাহেল

@ রাচেল - আমি আপনার মত পর্যবেক্ষককে বর্ণনা করব। মধ্যস্থতাকারী সম্ভবত বিশ্বব্যাপী নয়, তবে সেটের সমস্ত বস্তুর সাথে পরিচিত যা একে অপরের সাথে যোগাযোগ করে চলেছে তবে এখন মধ্যস্থতাকারীর মধ্য দিয়ে যায়। মধ্যস্থতাকারী যদি পর্যবেক্ষক হিসাবে প্রয়োগ না করা হয়, তবে এই ক্ষেত্রে সেগুলি all সমস্ত অবজেক্টের সম্পর্কে জানে (কমপক্ষে তাদের পর্যবেক্ষণযোগ্য ইন্টারফেসের মাধ্যমে, সম্ভবত সরাসরি) তবে তারা এটি সম্পর্কে জানেন না।
পিএসআর

9

পর্যবেক্ষকগুলির মধ্যে কোনও সমন্বয় প্রয়োজন হয় না এবং পর্যবেক্ষকগুলির সম্পর্কটি এক পথে চলে যায় যখন পর্যবেক্ষক প্যাটার্নটি ভাল কাজ করে ।

উদাহরণস্বরূপ, অবজেক্টস বি এবং সি অবজেক্ট এ পর্যবেক্ষণ করুক। যখন বস্তু একটি অগ্নিকাণ্ডের ঘটনা এক্স, তখন অবজেক্ট বি এর পদ্ধতিটি ওয়াই () নির্বাহ করা উচিত এবং অবজেক্ট সি দ্বারা পদ্ধতি জেড () চালানো উচিত। যদি পদ্ধতিগুলি BY () এবং সিজেড () সম্পূর্ণ স্বাধীন হয় এবং কোনও সমন্বয়ের প্রয়োজন হয় না, তবে এগিয়ে যান এবং পর্যবেক্ষক প্যাটার্নটি ব্যবহার করুন।

অন্যদিকে, যদি BY () অবশ্যই সিজেড () এর আগে নির্বাহ করা উচিত তবে আপনি মধ্যস্থতাকারী প্যাটার্নটি ব্যবহার করতে চাইবেন যেখানে মধ্যস্থতা এই সমন্বয়কে আবদ্ধ করে। এই দৃশ্যে, মধ্যস্থতাকারী এম অবজেক্ট এ পর্যবেক্ষণ করবে এবং বি এবং সি এর সাথে সম্পর্কিত হবে, যখন আগুনের ঘটনা X, M ইভেন্টটিকে পরিচালনা করবে এবং নির্ধারিত ক্রমে BY () এবং সিজেড () কল করবে।

এছাড়াও, যদি ক, খ ও সি বস্তু একে অপরকে পর্যবেক্ষণ করতে হয় তবে মধ্যস্থতাকারী হিসাবে মধ্যস্থতাকারী ব্যবহার করে এই বিষয়গুলি ডিক্লুপ করতে এবং স্প্যাগেটি কোড এড়াতে দীর্ঘ পথ যেতে হবে।


5

Observerপ্যাটার্ন যখন একটি কর্ম এক শ্রেণী (পর্যবেক্ষিত বর্গ) গ্রহণ ব্যবহৃত হয় অন্য ক্লাসে একটি প্রতিক্রিয়া (দেখে বর্গ) উত্পাদন করতে প্রয়োজন কিন্তু এটা অবাঞ্ছিত জন্য পর্যবেক্ষিত বর্গ দেখে ক্লাসে মিলিত হবে। এটি একটি খুব সাধারণ প্যাটার্ন। SAX XML পার্সার একটি ভাল উদাহরণ হতে পারে। SAX পার্সার ব্যবহার করতে, একটি ক্লায়েন্ট ContentHandlerপার্সার অপারেশনটি "পর্যবেক্ষণ" করতে ইন্টারফেসটি প্রয়োগ করে । পার্সার যেমন এক্সএমএল ডকুমেন্টের উপাদানগুলির মুখোমুখি হয়, এটির পদ্ধতিগুলি কল করে ContentHandler। পার্সার ক্লায়েন্ট কোড শুরু করতে সক্ষম, তবে পার্সারটি ক্লায়েন্ট কোডের সাথে মিলিত হয় না।

Mediatorপ্যাটার্ন অবজেক্টের একটি সেট ব্যবহার করা প্যাটার্ন একজন এনক্যাপস্যুলেশন হয়। ক্লায়েন্ট কোডটি কেবলমাত্র একাধিক অন্যান্য শ্রেণিতে মিলিত হওয়ার পরিবর্তে মধ্যস্থতাকারীর সাথে মিলিত হয়। এটি সমষ্টি হিসাবে সমান, এনক্যাপসুলেটেড বস্তুর আজীবন মধ্যস্থতার জীবনকাল বাদে পৃথক।


1

সহজ কথায় (যা আমি এটি মনে রাখার জন্য ব্যবহার করি):

পর্যবেক্ষক: যখন কোনও বস্তু অন্যটিতে রাষ্ট্রীয় পরিবর্তন সম্পর্কে অবহিত করতে চায় তখন ব্যবহার করুন (কথায় কথায় কথায় কথায় বলুন, ইভেন্টগুলি পর্যবেক্ষক হিসাবে ব্যবহার করুন)

মধ্যস্থতাকারীটিকে বোঝার জন্য, আপনি ফেকাডকে প্রথমে বিবেচনা করার সময় আরও সহজ মনে করি: ফেকাড পৃথক শ্রেণির কার্যকারিতা একসাথে (কখনও কখনও সম্পূর্ণ সাবসিস্টেমগুলি) এবং একক ইন্টারফেসে সেই কার্যকারিতা সরবরাহ করে।

মধ্যস্থতাকারী: মুখোমুখি হিসাবে একই, এটি নতুন কার্যকারিতা উত্পাদন করতে সামগ্রিক শ্রেণীর সকলের কার্যকারিতা একত্রিত করে। ( এখানে ভাল ব্যাখ্যা )

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