একটি উদাহরণ দিয়ে যেতে দাও: আপনি দুটি অ্যাপ্লিকেশন তৈরি করতে চান তা বিবেচনা করুন:
- চ্যাট অ্যাপ্লিকেশন।
- জরুরী অ্যাম্বুলেন্স অপারেটর অ্যাপ্লিকেশন।
মধ্যস্থতাকারী
চ্যাট অ্যাপ্লিকেশনটি তৈরি করে আপনি mediator
ডিজাইনের ধরণটি বেছে নেবেন ।
- ব্যক্তিরা যে কোনও সময় আড্ডায় যোগ দিতে এবং ছেড়ে চলে যেতে পারে, সুতরাং চ্যাট করা দু'জনের মধ্যে প্রত্যক্ষ রেফারেন্স রাখার কোনও মানে হয় না।
- আমাদের এখনও দুটি ব্যক্তির মধ্যে যোগাযোগ সহজতর করতে এবং তাদের সাথে চ্যাট করার অনুমতি দেওয়া দরকার।
আমরা কেন পছন্দ করব mediator
? এর সংজ্ঞাটি একবার দেখুন:
মধ্যস্থতাকারী প্যাটার্ন সহ, বস্তুর মধ্যে যোগাযোগ একটি মধ্যস্থ বস্তুর মধ্যে আবদ্ধ হয়। অবজেক্টস আর একে অপরের সাথে সরাসরি যোগাযোগ করে না, পরিবর্তে মধ্যস্থতার মাধ্যমে যোগাযোগ করে। এটি যোগাযোগের অবজেক্টগুলির মধ্যে নির্ভরতা হ্রাস করে, যার ফলে সংযোগকে হ্রাস করে।
ম্যাজিক কীভাবে কাজ করে? প্রথমে আমরা চ্যাট মধ্যস্থতাকারী তৈরি করব এবং ব্যক্তিগণকে এটিতে নিবন্ধিত করবো, সুতরাং এটির সাথে প্রতিটি ব্যক্তির সাথে দুটি দিকনির্দেশক সংযোগ থাকবে (ব্যক্তি চ্যাট মধ্যস্থতাকারী ব্যবহার করে বার্তা পাঠাতে পারে যার ফলে এটির অ্যাক্সেস হতে পারে, এবং চ্যাট মধ্যস্থতাকারী অ্যাক্সেস করবে) যে ব্যক্তির আপত্তি আছে তার প্রাপ্ত পদ্ধতির কারণে এটিতেও এর অ্যাক্সেস রয়েছে)
function Person(name) {
let self = this;
this._name = name;
this._chat = null;
this._receive(from, message) {
console.log("{0}: '{1}'".format(from.name(), message));
}
this._send(to, message) {
this._chat.message(this, to, message);
}
return {
receive: (from, message) => { self._receive(from, message) },
send: (to, message) => { self._send(to, message) },
initChat: (chat) => { this._chat = chat; },
name: () => { return this._name; }
}
}
function ChatMediator() {
let self = this;
this._persons = [];
return {
message: function (from, to, message) {
if (self._persons.indexOf(to) > -1) {
self._persons[to].receive(from, message);
}
},
register: function (person) {
person.initChat(self);
self._persons.push(person);
}
unRegister: function (person) {
person.initChat(null);
delete self._persons[person.name()];
}
}
};
//Usage:
let chat = new ChatMediator();
let colton = new Person('Colton');
let ronan = new Person('Ronan');
chat.register(colton);
chat.register(ronan);
colton.send(colton, 'Hello there, nice to meet you');
ronan.send(ronan, 'Nice to meet you to');
colton.send(colton, 'Goodbye!');
chat.unRegister(colton);
পর্যবেক্ষক
911 কল অ্যাপ্লিকেশনটি তৈরি করে আপনি observer
ডিজাইনের ধরণটি বেছে নেবেন ।
- প্রতিটি অ্যাম্বুলেন্সের
observer
অবজেক্ট যখন জরুরি অবস্থা থাকে তখন অবহিত হওয়ার ইচ্ছা পোষণ করে , যাতে সে ঠিকানাটি চালিয়ে সহায়তা করতে পারে।
- জরুরী অপারেটর
observable
প্রত্যেকটি অ্যাম্বুলেন্সের রেফারেন্স রাখে observers
এবং সাহায্যের প্রয়োজন হলে (বা ইভেন্ট উত্পন্ন করার সময়) তাদেরকে অবহিত করে।
আমরা কেন পছন্দ করব observer
? এর সংজ্ঞাটি একবার দেখুন:
সাবজেক্ট নামে পরিচিত একটি অবজেক্ট তার নির্ভরশীলদের একটি তালিকা বজায় রাখে, পর্যবেক্ষক বলা হয় এবং সাধারণত তাদের পদ্ধতিগুলির একটিতে কল করে কোনও রাজ্যের পরিবর্তনের জন্য তাদের স্বয়ংক্রিয়ভাবে অবহিত করে।
function AmbulanceObserver(name) {
let self = this;
this._name = name;
this._send(address) {
console.log(this._name + ' has been sent to the address: ' + address);
}
return {
send: (address) => { self._send(address) },
name: () => { return this._name; }
}
}
function OperatorObservable() {
let self = this;
this._ambulances = [];
return {
send: function (ambulance, address) {
if (self._ambulances.indexOf(ambulance) > -1) {
self._ambulances[ambulance].send(address);
}
},
register: function (ambulance) {
self._ambulances.push(ambulance);
}
unRegister: function (ambulance) {
delete self._ambulances[ambulance.name()];
}
}
};
//Usage:
let operator = new OperatorObservable();
let amb111 = new AmbulanceObserver('111');
let amb112 = new AmbulanceObserver('112');
operator.register(amb111);
operator.register(amb112);
operator.send(amb111, '27010 La Sierra Lane Austin, MN 000');
operator.unRegister(amb111);
operator.send(amb112, '97011 La Sierra Lane Austin, BN 111');
operator.unRegister(amb112);
পার্থক্য:
- চ্যাট
mediator
ব্যক্তি বস্তুর মধ্যে দুই মুখী যোগাযোগও আছে (প্রেরণ ও গ্রহণ) কোথায় অপারেটর observable
শুধুমাত্র একটি উপায় যোগাযোগ (এটা অ্যাম্বুলেন্স বলতে হয়েছে observer
চালাতে কিন্তু শেষ করতে)।
- চ্যাটটি
mediator
ব্যক্তি ব্যক্তিদের মধ্যে তাদের মধ্যে ইন্টারঅ্যাক্ট করতে পারে (এটি সরাসরি যোগাযোগ না হলেও), অ্যাম্বুলেন্সগুলি observers
কেবল অপারেটর observable
ইভেন্টগুলিতে নিবন্ধন করে ।
- প্রতিটি ব্যক্তি বস্তু চ্যাটে একটি রেফারেন্স রয়েছে
mediator
, এবং এছাড়াও চ্যাট mediator
ব্যক্তির প্রতি এক রাখুন রেফারেন্স। যেখানে অ্যাম্বুলেন্স observer
অপারেটরের রেফারেন্স রাখে না observable
, কেবল অপারেটর observable
প্রতিটি অ্যাম্বুলেন্সের রেফারেন্স রাখে observer
।
Programmers.StackExchange
অস্বীকার করা হয়েছিল, তবে আমি উত্তরটিতে আগ্রহী বলেই সেখানে একটি অনুরূপ পোস্ট করেছি। আপনি উত্তর কিছু আকর্ষণীয় খুঁজে পেতে পারেন। :)