设计模式之观察者设计模式
来源:互联网 发布:软件招标网 编辑:程序博客网 时间:2024/05/01 01:18
最近在看RxJava的源码,大家都知道Rxjava是基于响应式编程来设计的,那么怎么才能做到响应式编程? 这里有暗藏着一种设计模式—–观察者设计模式,那么我们今天就来给大家把观察者设计模式给大家好好聊一聊
今天只说观察者设计模式 哈哈
那么简单点说下 什么观察者设计模式 ?
举个例子吧! 前一段时间 朝阳群众不是炒得火热吗? 我们今天举一个朝阳群众抓小偷的例子吧 哈哈
事情是这样的: 一个小偷了一笔钱,然后了就开始炫耀了,这时候正好被路过的一群朝阳群众发现,于是乎这几个朝阳群众就开始抓贼了..事情呢 就这么简单,来 让我们分析一下 这个故事藏着这么几个关键点
1> 观察者,是朝阳群众: 朝阳群众就要做他们的事情了
2> 被观察者 ,是小偷: 小偷喜欢炫耀,于是乎就把朝阳群众给招来了,但是朝阳群众有的感兴趣,有的不感兴趣
好的 基于上面的分析 为了程序的可扩展性,我们的观察者和被观察者的父类我们使用接口,那我们就开始愉快的写代码吧!
package ligang;/** *这是观察者的父类 */public interface Police {//警察类 public void Catch(String str);//抓小偷}***************************分割线*************************************************package ligang;/** * 被观察者的父类 */public interface ThiefParent { //增加一个朝阳群众 public void addPolice(Police police); //离开一个朝阳群众 public void removePolice(Police police); //因为炫耀,朝阳群众要报警了 public void notifyPolice(String str);}***************************分割线*************************************************package ligang;import java.util.ArrayList;import java.util.List;/*** * 被观察者具体实现类 */public class Thief implements ThiefParent { private List<Police>list=new ArrayList<Police>(); @Override public void addPolice(Police police) { list.add(police); } @Override public void removePolice(Police police) { list.remove(police); } //朝阳群众开始围观 然后报警 @Override public void notifyPolice(String str) { for (int i=0;i<list.size();i++){ Police police = list.get(i); police.Catch(str); } }}***************************分割线*************************************************/** * 朝阳群众1 观察者 */public class ChaoYang1 implements Police { @Override public void Catch(String str) { System.out.println(str); System.out.println("我去报社发消息"); }}/** * 朝阳群众2 观察者 */public class ChaoYang2 implements Police { @Override public void Catch(String str) { System.out.println(str); System.out.println("我去记者中心发布消息"); }}/** * 朝阳群众3 观察者 */public class ChaoYang3 implements Police { @Override public void Catch(String str) { System.out.println(str); System.out.println("我去派出所报案"); }}***************************分割线*************************************************package ligang;/** * 测试类 */public class Demo { public static void main(String[] args) { Thief thief = new Thief(); //有三名朝阳群众 ChaoYang1 chaoYang1 = new ChaoYang1(); ChaoYang2 chaoYang2 = new ChaoYang2(); ChaoYang3 chaoYang3 = new ChaoYang3(); //小偷引来了三名朝阳群众 thief.addPolice(chaoYang1); thief.addPolice(chaoYang2); thief.addPolice(chaoYang3); //又有一位朝阳群众离开了 thief.removePolice(chaoYang1); //小偷开始炫耀了 thief.notifyPolice("今天偷了xxx块钱"); }}运行结果:今天偷了xxx块钱我去记者中心发布消息今天偷了xxx块钱我去派出所报案
好了上面的代码便是我们观察者设计模式的详细解释 其中有注释看懂应该是没问题,哈哈 这是我看Rxjava源码的时候遇到第一个坑,接下来再说高级泛型,这个坑我踩到了,我会继续分享的,直到把RxJava源码看完弄明白 come on
0 0
- 设计模式之-观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- Windows下删除服务命令
- IOS APP程序发布IPA以及发布上传到AppStore
- 浅谈动感歌词-歌词解析篇
- 集合框架_HashMap集合键是Stirng值是String的案例
- live555 - testOnDemandRTSPServer
- 设计模式之观察者设计模式
- mysqlAPI实例
- nginx配置
- 12 个好用且不花钱的网络监控工具
- (?)数据结构实验之链表七:单链表中重复元素的删除
- 17 - 03 - 28 图解HTTP(32)
- 哈夫曼树编码及其图形化的实现
- 谈谈我理解的测试的核心价值
- mininet安装