主页 > 软件开发  > 

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

行为型模式-观察者模式(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<>(); @Override public void registerObserver(Observer observer, String newsType) { observers puteIfAbsent(newsType, k -> new ArrayList<>()).add(observer); } @Override public void removeObserver(Observer observer, String newsType) { List<Observer> observerList = observers.get(newsType); if (observerList != null) { observerList.remove(observer); } } @Override public 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; } @Override public 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("财经", "股市行情上涨"); } }
标签:

行为型模式-观察者模式(Publish/Subscribe)由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“行为型模式-观察者模式(Publish/Subscribe)