एक उदाहरण से आइए: विचार करें कि आप दो एप्लिकेशन बनाना चाहते हैं:
- चैट आवेदन।
- आपातकालीन एम्बुलेंस ऑपरेटर आवेदन।
मध्यस्थ
चैट एप्लिकेशन का निर्माण करना आप 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
अस्वीकार कर दिया गया था, लेकिन मैंने वहां एक समान पद बनाया क्योंकि मुझे उत्तर में रुचि थी। आपको कुछ जवाब दिलचस्प लग सकते हैं। :)