Design patterns
प्रकाशित-सदस्यता लें
खोज…
जावा में प्रकाशित-सदस्यता लें
प्रकाशक-ग्राहक YouTube, Facebook और अन्य सोशल मीडिया सेवाओं के उदय को देखते हुए एक परिचित अवधारणा है। मूल अवधारणा यह है कि एक Publisher
जो सामग्री उत्पन्न करता है और एक Subscriber
जो सामग्री का उपभोग करता है। जब भी Publisher
सामग्री उत्पन्न करता है, प्रत्येक Subscriber
को सूचित किया जाता है। Subscribers
सैद्धांतिक रूप से एक से अधिक प्रकाशकों की Subscribers
सकते हैं।
आमतौर पर एक ContentServer
होता है जो मैसेजिंग में मदद करने के लिए प्रकाशक और ग्राहक के बीच बैठता है
public class Publisher {
...
public Publisher(Topic t) {
this.topic = t;
}
public void publish(Message m) {
ContentServer.getInstance().sendMessage(this.topic, m);
}
}
public class ContentServer {
private Hashtable<Topic, List<Subscriber>> subscriberLists;
private static ContentServer serverInstance;
public static ContentServer getInstance() {
if (serverInstance == null) {
serverInstance = new ContentServer();
}
return serverInstance;
}
private ContentServer() {
this.subscriberLists = new Hashtable<>();
}
public sendMessage(Topic t, Message m) {
List<Subscriber> subs = subscriberLists.get(t);
for (Subscriber s : subs) {
s.receivedMessage(t, m);
}
}
public void registerSubscriber(Subscriber s, Topic t) {
subscriberLists.get(t).add(s);
}
public class Subscriber {
public Subscriber(Topic...topics) {
for (Topic t : topics) {
ContentServer.getInstance().registerSubscriber(this, t);
}
}
public void receivedMessage(Topic t, Message m) {
switch(t) {
...
}
}
}
आमतौर पर, पब-उप डिज़ाइन पैटर्न को एक मल्टीथ्रेडेड दृश्य को ध्यान में रखते हुए लागू किया जाता है। अधिक सामान्य कार्यान्वयन में से एक प्रत्येक Subscriber
को एक अलग थ्रेड के रूप में देखता है, जिसमें ContentServer
एक थ्रेड पूल का प्रबंधन करता है
जावास्क्रिप्ट में सरल पब-उप उदाहरण
प्रकाशकों और ग्राहकों को एक दूसरे को जानने की जरूरत नहीं है। वे बस संदेश कतारों की मदद से संवाद करते हैं।
(function () {
var data;
setTimeout(function () {
data = 10;
$(document).trigger("myCustomEvent");
}, 2000);
$(document).on("myCustomEvent", function () {
console.log(data);
});
})();
यहां हमने myCustomEvent नामक एक कस्टम ईवेंट प्रकाशित किया और उस ईवेंट पर सब्सक्राइब किया। इसलिए उन्हें एक दूसरे को जानने की जरूरत नहीं है।