您的位置:首页 > 其它

设计模式--观察者模式

2017-03-30 18:14 183 查看

设计模式--观察者模式

1 概述

1.1 定义

观察者模式(Observer Design),也叫发布订阅模式:定义对象间一对多的依赖关系,使得每当一个对象状态改变时,它的所有依赖者都会收到通知并自动更新。

1.2 应用

消息队列的处理机制,如EJB的消息队列。(原理基本相同)

1.3 类图

1 public class People implements Observer {
2     private WeChat weChat;
3     private String name;
4
5     People(String name, WeChat weChat) {
6         this.name = name;
7         this.weChat = weChat;
8     }
9
10     // 订阅微信公众号
11     public boolean order (String name) {
12         return weChat.order(this, name);
13     }
14
15     // 接受微信公众号发送的消息
16     public void recieveMessage(Observable o, Object arg) {
17         System.out.println(name + "接收到微信公众号「" + o + "」的信息:" + arg);
18     }
19
20     @Override
21     public void update(Observable o, Object arg) {
22         recieveMessage(o, arg);
23     }
24 }
25
26 /**
27  * 微信公众号
28  */
29 public class WeChatPublicMessage extends Observable {
30     private String name;
31
32     WeChatPublicMessage(String name) {
33         super();
34         this.name = name;
35     }
36
37     // 发布消息
38     public void publish(String message) {
39         setChanged();
40         notifyObservers(message);
41     }
42
43     @Override
44     public String toString() {
45         return name;
46     }
47
48 }
49
50 public class WeChat {
51     public static HashMap<String, WeChatPublicMessage> map = new HashMap<>();
52
53     // 订阅微信公众号
54     public boolean order(People people, String name) {
55         WeChatPublicMessage weChatPublicMessage = map.get(name);
56         if(weChatPublicMessage == null) {
57             return false;
58         }
59         // 该微信公众号添加订阅人
60         weChatPublicMessage.addObserver(people);
61         return true;
62     }
63 }
64
65 public class Client {
66     public static void main(String[] args) {
67         WeChatPublicMessage weChatPublicMessage = new WeChatPublicMessage("小道消息");
68         WeChatPublicMessage weChatPublicMessage1 = new WeChatPublicMessage("侠客岛");
69         WeChatPublicMessage weChatPublicMessage2 = new WeChatPublicMessage("财新网");
70         WeChat.map.put("小道消息", weChatPublicMessage);
71         WeChat.map.put("侠客岛", weChatPublicMessage1);
72         WeChat.map.put("财新网", weChatPublicMessage2);
73
74         People people = new People("张三", new WeChat());
75         People people1 = new People("李四", new WeChat());
76
77         people.order("小道消息");
78         people.order("财新网");
79         people.order("侠客岛");
80         people1.order("财新网");
81
82         weChatPublicMessage.publish("今天三星S8发布");
83         weChatPublicMessage1.publish("韩美举行大规模的军演,朝鲜发出严正抗议");
84         weChatPublicMessage2.publish("第一季度中国GDP同比增长6.6%");
85     }
86 }output:
87 张三接收到微信公众号「小道消息」的信息:今天三星S8发布
88 张三接收到微信公众号「侠客岛」的信息:韩美举行大规模的军演,朝鲜发出严正抗议
89 李四接收到微信公众号「财新网」的信息:第一季度中国GDP同比增长6.6%
90 张三接收到微信公众号「财新网」的信息:第一季度中国GDP同比增长6.6%


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: