观察者模式
来源:互联网 发布:知乎校园招聘2017 编辑:程序博客网 时间:2024/06/10 16:14
什么是观察者模式
* 观察者模式,又叫发布-订阅模式(Publist/Subscribe)模式; * 定义了一种一对多的依赖关系,让多个观察者对象监听某一个主题对象. * 这个主题对象发生变化时,会通知所有的观察者对象,使它们能够自动更新自己
观察者模式的组成以及Demo
Subject
/** * Subject类,主题对象/抽象通知者,一般用一个抽象类或接口实现. * 把所有对观察者对象的引用保存在一个聚类中,每个subject可有任意数量的观察者. * 提供接口,可以增加和删除观察者对象 */public interface Subject { void attach(Observer observer); void deattach(Observer observer); String getState(); void setState(String state); void notifyObservers();}
Observer
/** * 抽象观察者,为所有的具体观察定义一个接口,在得到subject的通知时更新自己. * 这个方法叫做更新接口; * 通过包含一个更新接口,这个接口通常包含了一个update(),这个方法被称为更新方法 */public interface Observer { void update();}
具体通知者
/** * ConcreteSubject,叫做具体主题或者具体通知者,将有关状态存入具体观察者对象; * 在具体观察的内部状态发生改变时,给所有登记过的观察者发出通知. */public class Notifier implements Subject { public String state; List<Observer> mObservers=new ArrayList<>(); public Notifier(String state) { this.state = state; } @Override public void attach(Observer observer) { mObservers.add(observer); } @Override public void deattach(Observer observer) { mObservers.remove(observer); } @Override public String getState() { return state; } @Override public void setState(String state) { this.state=state; notifyObservers(); } @Override public void notifyObservers() { for(Observer ob:mObservers){ ob.update(); } }}
具体观察者
/** * ConcreteObserver类,具体观察者,实现由抽象观察者实现的接口,以便自身的状态与subject相协调. * 具体观察者可以保存一个具体subject对象的引用. */public class Movier implements Observer { protected Subject mNotifier; protected String name; public Movier(Subject notifier, String name) { mNotifier = notifier; this.name = name; } @Override public void update() { Log.d("meee",name+","+ mNotifier.getState()+"电影!!"); }}public class Gamer implements Observer { protected Subject mNotifier; protected String name; public Gamer(Subject notifier, String name) { mNotifier = notifier; this.name = name; } @Override public void update() { Log.d("meee",name+","+ mNotifier.getState()+"游戏!!"); }}
观察者模式的应用场景
当一个对象的改变需要同时改变其他对象的时候,而且不需要知道具体需要多少个对象需要改变时;
观察者模式的作用
本质上就是在解除耦合,让耦合的双方都依赖抽象;Subject发出通知时不需要知道谁是它的Observer,任意Observer也不需要知道其他的观察者;
观察者模式的缺点
尽管已经用了依赖倒转原则(依赖接口),但抽象通知者还是依赖抽象观察者(知晓observer有update方法)
阅读全文
0 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 计算机网络体系结构和协议
- Axure导入元件库的两种方式-附完整元件库
- js调试工具Console命令详解
- Representative Sampling
- kafka 从分区任意位置、分区开头、分区末尾开始消费数据
- 观察者模式
- 数据库中的范式
- PHPSTORM Xdebug断点调试 监听无法使用的问题
- Linux tcpdump命令详解
- 前端跨域请求原理及实践
- Babel简介
- Java 3DES 加密
- python socket编程基础(思维导图)
- react native ScrollView滚动不起作用