Design patterns
게시 - 구독
수색…
Java로 게시 - 구독
게시자 - 구독자는 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) {
...
}
}
}
일반적으로 pub-sub 디자인 패턴은 다중 스레드 뷰를 염두에두고 구현됩니다. 더 일반적인 구현 중 하나는 각 Subscriber
를 별도의 스레드로보고 ContentServer
가 스레드 풀을 관리하는 것입니다
JavaScript의 간단한 pub-sub 예제
게시자와 구독자는 서로를 알 필요가 없습니다. 그들은 단순히 메시지 대기열의 도움을 받아 통신합니다.
(function () {
var data;
setTimeout(function () {
data = 10;
$(document).trigger("myCustomEvent");
}, 2000);
$(document).on("myCustomEvent", function () {
console.log(data);
});
})();
여기서 myCustomEvent 라는 사용자 정의 이벤트를 게시하고 해당 이벤트에 가입했습니다. 따라서 그들은 서로를 알 필요가 없습니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow