观察者模式
来源:互联网 发布:帝国时代2mac 编辑:程序博客网 时间:2024/04/28 06:01
观察者模式
曾经看过观察者模式的UML图,不知道大家觉得怎么样,反正我是看到都烦,一点不理解,直到在我实习的时候碰到一个喜欢的女孩子,然后突然就理解了,虽然最后还是没成功(压根没讲过话),但是这场单恋让我距离计算机科学又近了一步还是有很大的价值的,如果将来我成功了,她也算的上我成功背后的女人,当然是之一了。废话不多说,我们来看下我当时的经历。
开始我看到一个做我斜对角的女孩,挺漂亮的,然后我就想去了解,但是你也知道呀,我们工作还是很忙的呀,不能实时的观察妹子的。所以我就设计了一种方案,方案的代码如下:
// 妹纸的实现类public class MeiZi { private HanZi hanZi = new HanZi(); /** 上班 */ public void shangban() { System.out.println("开始上班了..."); hanZi.update("上班"); }; /** 下班 */ public void xiaban() { System.out.println("开始下班了..."); hanZi.update("下班"); } /** 吃饭 */ public void chifan() { System.out.println("开始吃饭了..."); hanZi.update("吃饭"); }//我的实现类public class HanZi { /** */ public void update(String messgage) { doSomeThing(messgage); } private void doSomeThing(String messgage) { if ("上班".equals(messgage)) { System.out.println("去接她"); } if ("下班".equals(messgage)) { System.out.println("去接她"); } if ("吃饭".equals(messgage)){ System.out.println("请他吃饭"); } }}执行方案类public class Client { public static void main(String[] args) { MeiZi meiZi = new MeiZi(); meiZi.shangban(); meiZi.chifan(); meiZi.xiaban(); }}
好的,阅读了上面代码中同学都会发现,妈的,不是说好单恋的那,怎么在妹子的世界里还有你的存在,仔细一看,是的呀,在MeiZi的类中怎么会出现 HanZi hanZi = new HanZi(); 不合理呀,难道每一个喜欢妹子的人,都要出现在妹子的世界吗?显然是不可能的,例如我,就从来没有出现过。
所以我就想了一种办法,是不是可以借助一个平台,例如一个社交工具,然后妹子注册,我也注册,那么妹子每次发心情的时候我可以了解了呢。我们来改下设计,
//建立妹子观察者的一个接口:public interface MeiZiObservable { /** 添加一个观察者 */ public void addObserver(); /** 通知观察者*/ public void notityObjserver();}妹子实现类(现在想妹纸可以关注社交软件了,然后开心晒心情了)public class MeiZi implements MeiZiObservable{ private Set<HanziObserver> hanziObservers = new HashSet<HanziObserver>(); @Override public void addObserver(HanziObserver hanziObserver) { hanziObservers.add(hanziObserver); } @Override public void notityObjserver(String message) { Iterator<HanziObserver> hanziObserverIterator = hanziObservers.iterator(); while (hanziObserverIterator.hasNext()) { HanziObserver hanziObserver = hanziObserverIterator.next(); hanziObserver.update(message); } } /** 上班 */ public void shangban() { System.out.println("开始上班了..."); notityObjserver("上班"); }; /** 下班 */ public void xiaban() { System.out.println("开始下班了..."); notityObjserver("下班"); } /** 吃饭 */ public void chifan() { System.out.println("开始吃饭了..."); notityObjserver("吃饭"); }}观察者的接口(可以让喜欢关注妹纸的汉子都关注下)public interface HanziObserver { public void update(String message);}汉子的实现类(汉子关注妹纸信息,请吃饭的请吃饭,接上下班的接上下班,还可以尾行,做自己想做的事情吧)public class HanZi implements HanziObserver{ public void update(String messgage) { doSomeThing(messgage); } private void doSomeThing(String messgage) { if ("上班".equals(messgage)) { System.out.println("去接她"); } if ("下班".equals(messgage)) { System.out.println("去接她"); } if ("吃饭".equals(messgage)){ System.out.println("请他吃饭"); } }}//最后实现:public class Client { public static void main(String[] args) { HanziObserver hanziObserver = new HanZi(); MeiZi meiZi = new MeiZi(); meiZi.addObserver(hanziObserver); meiZi.shangban(); meiZi.chifan(); meiZi.xiaban(); }}
是不是到这里,一个比较好的观察者就写好了呀。其实在Java的util包中帮助我们定义了Observable和Observer
本质上和我们上面定义的差不多。
Observable实现了对观察者的管理,添加,删除,通知消息等操作。
最后用Java自带的来演示下吧:
public class MeiZi extends Observable { /** 上班 */ public void shangban() { System.out.println("开始上班了..."); setChanged(); notifyObservers("上班"); }; /** 下班 */ public void xiaban() { System.out.println("开始下班了..."); setChanged(); notifyObservers("下班"); } /** 吃饭 */ public void chifan() { System.out.println("开始吃饭了..."); setChanged(); notifyObservers("吃饭"); }}public class HanZi implements Observer{ /** */ public void update(Observable o, Object arg) { doSomeThing(String.valueOf(arg)); } private void doSomeThing(String messgage) { if ("上班".equals(messgage)) { System.out.println("去接她"); } if ("下班".equals(messgage)) { System.out.println("去接她"); } if ("吃饭".equals(messgage)){ System.out.println("请他吃饭"); } }}public class Client { public static void main(String[] args) { Observer hanziObserver = new HanZi(); MeiZi meiZi = new MeiZi(); meiZi.addObserver(hanziObserver); meiZi.shangban(); meiZi.chifan(); meiZi.xiaban(); }}
好了,一个观察者模式的代码就写完了。是不是很简单呀,当然追女孩子也很简单哦,虽然我还没有成功的经历,如果以后我成功了,我会把经历来分享的。
爱代码,更爱生活。如果有什么错误或者想法交流的,希望大家加我的qq:1416011240。学习不仅仅是知识,还有做人的道理。谢谢
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 微信支付(公众号支付)微信公众平台开发教程(5)
- html2canvas 下载图片 报网络错误
- ibatis查询数据显示为ASCII码的问题
- java编程思想笔记-并发之死锁
- spring boot学习指南
- 观察者模式
- 详解PHP中instanceof关键字及instanceof关键字有什么作用
- Spring Boot缓存实战 默认Cache(ConcurrentMapCacheManager)
- 关于protobuf 枚举未指定默认值的情况
- 进程、线程、内存池及实现简易线程池
- 使用Atomikos配置jta来实现activiti和业务数据库事务性
- Echarts自适应浏览器大小
- SystemUI 5.1 自定义额外功能点
- 《.NET 规范》第 3 章 命名规范