设计模式--观察者模式
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
相关文章推荐
- 设计模式与泡mm的关系之Observer观察者模式及再思考
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
- 设计模式随笔系列:气象站的故事-观察者模式(Observer)[原]
- 利用观察者模式设计仿真器内核接口
- .NET中的设计模式五:观察者模式
- 设计模式之Observer观察者模式
- 认识观察者模式(设计模式)[转载]
- 设计模式学习笔记(二十一)——Observer观察者
- 用 spring 实现观察者设计模式
- .NET中的设计模式五:观察者模式 选择自 lane_cn 的 Blog
- 设计模式之观察者模式 (原创)
- 设计模式之观察者模式(Observer Pattern)(一)
- 设计模式之观察者模式
- IssueVision 学习笔记(三)-----设计模式之OBSERVER(观察者)模式
- 设计模式之观察者模式(Observer Pattern)(二)
- 探究观察者设计模式
- GEF框架中的设计模型(观察者模式)
- C#设计模式-观察者observer模式实现
- AspectJ实现设计模式(一)——观察者模式