欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > 行为型模式 - 观察者模式 (Publish/Subscribe)

行为型模式 - 观察者模式 (Publish/Subscribe)

2025/5/3 19:41:43 来源:https://blog.csdn.net/HongSH945/article/details/145920213  浏览:    关键词:行为型模式 - 观察者模式 (Publish/Subscribe)

行为型模式 - 观察者模式 (Publish/Subscribe)

订阅发布模式(Publish-Subscribe Pattern)是一种消息传递模式,在该模式中,发送者(发布者)不会直接将消息发送给特定的接收者(订阅者),而是将消息发布到一个中间的消息代理(如主题或频道),订阅了该主题的订阅者可以接收到这些消息。以下是几个订阅发布模式的经典案例。


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;// 主题接口
interface Subject {void registerObserver(Observer observer, String newsType);void removeObserver(Observer observer, String newsType);void notifyObservers(String newsType, String news);
}// 观察者接口
interface Observer {void update(String news);
}// 新闻机构类,实现主题接口
class NewsAgency implements Subject {private Map<String, List<Observer>> observers = new HashMap<>();@Overridepublic void registerObserver(Observer observer, String newsType) {observers.computeIfAbsent(newsType, k -> new ArrayList<>()).add(observer);}@Overridepublic void removeObserver(Observer observer, String newsType) {List<Observer> observerList = observers.get(newsType);if (observerList != null) {observerList.remove(observer);}}@Overridepublic void notifyObservers(String newsType, String news) {List<Observer> observerList = observers.get(newsType);if (observerList != null) {for (Observer observer : observerList) {observer.update(news);}}}public void publishNews(String newsType, String news) {System.out.println("发布 " + newsType + " 新闻: " + news);notifyObservers(newsType, news);}
}// 用户类,实现观察者接口
class User implements Observer {private String name;public User(String name) {this.name = name;}@Overridepublic void update(String news) {System.out.println(name + " 收到新闻: " + news);}
}// 客户端代码
public class NewsSystem {public static void main(String[] args) {NewsAgency newsAgency = new NewsAgency();User user1 = new User("张三");User user2 = new User("李四");// 用户订阅体育新闻newsAgency.registerObserver(user1, "体育");newsAgency.registerObserver(user2, "体育");// 用户订阅财经新闻newsAgency.registerObserver(user1, "财经");// 发布体育新闻newsAgency.publishNews("体育", "篮球比赛结果公布");// 发布财经新闻newsAgency.publishNews("财经", "股市行情上涨");}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词