设计模式- 观察者模式
来源:互联网 发布:mvvm 知乎 编辑:程序博客网 时间:2024/05/29 16:35
定义对象间的一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生改变时,会通知所有观察者对象,使它们能够自动更新自己。
例子:
定义观察者与被观察者
public interface Watcher{ public void update();}
public class Mother implements Watcher{ @Override public void update() { System.out.println("妈妈在看着"); }}
public class Father implements Watcher{ @Override public void update() { System.out.println("爸爸在看着"); }}
public interface Watched{ public void addWatcher(Watcher watcher); public void removeWatcher(Watcher watcher); public void notifyWatcher();}
public class Baby implements Watched{ List<Watcher> watcherList = new ArrayList<>(); @Override public void addWatcher(Watcher watcher) { watcherList.add(watcher); } @Override public void removeWatcher(Watcher watcher) { if (watcherList.contains(watcher)) { watcherList.remove(watcher); } } @Override public void notifyWatcher() { for (Watcher watcher : watcherList) { watcher.update(); } }}
测试类
public static void main(String[] args) { Father father; Baby baby = new Baby(); father = new Father(); baby.addWatcher(father); baby.addWatcher(new Mother()); baby.notifyWatcher(); System.out.println(); baby.removeWatcher(father); baby.notifyWatcher(); }
结果
爸爸在看着
妈妈在看着
妈妈在看着
我的理解就是,定义观察者,确定在一定情况下,要做什么
然后呢,定义被观察者,它可以增加删除它的观察者,并可通知观察者何时可以行动
使用RxJava实现
下面的demo ,是先生成被观察者,负责通知观察者变化。观察者做一些反馈
public class BabyObservable extends Observable{ public void cry() { System.out.println("宝宝哭了"); setChanged(); notifyObservers(); }}
public class FatherObserver implements Observer{ FatherObserver (BabyObservable babyObservable){ babyObservable.addObserver(this); } @Override public void update(Observable observable, Object data) { System.out.println("爸爸过了照顾了"); }}
public class MotherObserver implements Observer{ MotherObserver (BabyObservable babyObservable) { babyObservable.addObserver(this); } @Override public void update(Observable observable, Object data) { System.out.println("妈妈过了照顾了"); }}
public class BabyTest{ public static void main(String[] args) throws Exception { BabyObservable mBabyObservable = new BabyObservable(); FatherObserver fatherObserver = new FatherObserver(mBabyObservable); MotherObserver motherObservaer = new MotherObserver(mBabyObservable); mBabyObservable.cry(); }}
结果:
宝宝哭了
妈妈过了照顾了
爸爸过了照顾了
0 0
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- 设计模式-----观察者模式
- 设计模式:观察者模式
- 设计模式-观察者模式
- 设计模式 观察者模式
- 设计模式-观察者模式
- 设计模式-【观察者模式】
- 设计模式-观察者模式
- 设计模式 -- 观察者模式
- 设计模式-观察者模式
- 【设计模式】观察者模式
- 设计模式- 观察者模式
- 设计模式- 观察者模式
- 设计模式--观察者模式
- C语言回调函数学习
- Java网络编程——使用NIO实现非阻塞Socket通信
- 蓄水池抽样
- Spring框架-AOP细节
- Wireshark 和fidder
- 设计模式- 观察者模式
- SEO实战干货:独家揭秘内页快速收录排名
- Java实时读取日志文件
- 在MVC4 @Razor模板中使用ajax上传控件 uploadfile
- IE下无法保存Cookie和Session问题
- java.lang.Instrument 代理Agent使用
- 完美解决Android中,ScrollView嵌套ListView的冲突。
- driver_learn_summary
- Android Studio : 使用 jni 实现串口通讯