进阶3_RxJava1_观察者设计模式
2017-05-16 19:23
351 查看
进阶3_更好的异步RxJava 1 观察者设计模式
RxJava上手难度还是蛮大的,官方的解释就是一句话更好的异步。要想全面的了解RxJava,我觉得首先得从观察者设计模式入手。什么是观察者设计模式
也叫发布/订阅模式。是一种一对多的依赖关系,多个观察者对象会因为被观察对象的改变而随之产生行为。在安卓当中也有很多该模式的运用,比如广播,广播是被观察者,广播接收器则是观察者,当广播发出以后,存在着订阅关系,也就是我们在Intent-fiter当中过滤条件达成,那么相应的广播接受者就会做出相应的处理操作。
从文字到图形的理解
很清楚很直观的表现出一对多,连线部分则用来表示依赖关系。更重要的是站在一个开发者角度设计的时候,我们应该清楚,主题对象并不关心观察者到底是哪一个类型的,它只会关心你是否具备者观察的功能,也就是基于Java的单继承问题,我们会把观察者设计成一个借口,这样更加灵活,也贴切实际。也就是我不关心你是猫是狗,我只关心你是否具备观察的能力,还有你是否在观察我,如果都满足,那么当我发生更改,介于依赖关心,我会通知到你,你做出任何反应我是不关心的。同样道理主题对象也可以做成接口,来提升整个程序的灵活。这样你再来看类图应该就很好理解了。
在程序上我们使用集合来代表一对多关系,集合当中存放具备观察能力的对象就OK,使用attch()和detach()来决定建立和取消这种依赖关系,实现无非是在集合当中做相应的增加、移除操作。notify便是我们在主题对象发生更改的时候,遍历整个集合让他们自己去做更新就ok。形象一点,attch就是建立两者之间的线,detach便是取消,当主题对象发生改变,会顺着这些线条去提醒观察者对象,来做到更新自己。就是这么一回事
从图形到代码的实现
代码的代建,肯定是从抽象到具体。interface Observer
public interface Observer { void update(String updateState); }
abstract class Subject
public abstract class Subject { private ArrayList<Observer> observers; private String name; public Subject(String name){ this.observers = new ArrayList<Observer>(); this.name = name + "Subject"; } /* 确定依赖关系 */ public void attach(Observer observer){ if(observer != null){ this.observers.add(observer); } } /* 取消依赖关系 */ public void detach(Observer observer){ if(observer != null){ this.observers.remove(observer); } } /* 更新操作 */ public void notifyAllObserver(String updateState){ for(Observer tempObserver : this.observers){ tempObserver.update(updateState); } } }
观察者实现类
public class FirstObserver implements Observer{ private String observerState; private String name; public FirstObserver(String name){ this.name = name; } public String getObserverState(){ return this.observerState; } public void update(String updateState){ this.observerState = updateState; } public String toString(){ return this.name+"-observer"; } }
主题实现类
public class FirstSubject extends Subject { public FirstSubject(String name) { // TODO: Add your code here super(name); } /* 模拟给外部 触发状态更改操作 */ public void change(String updateState){ /* 状态更改 提醒观察者更新 */ notifyAllObserver(updateState); } }
测试类
public static void main(String[] args) { /* 单个主题对象 */ FirstSubject subject = new FirstSubject("产品1"); /* 多个观察者对象 这里就都用FirstOvserver了 */ FirstObserver firstObserver = new FirstObserver("观察者1"); FirstObserver twoObserver = new FirstObserver("观察者2"); FirstObserver threeObserver = new FirstObserver("观察者3"); /* 确定依赖关系 也可以称之为订阅 */ subject.attach(firstObserver); subject.attach(twoObserver); subject.attach(threeObserver); /* 模拟状态更改 */ subject.change("开始"); subject.change("执行"); subject.change("结束"); }
从结果就可以得出,当我状态发生更改以后,会触发提醒所有观察者notifyAllObserver,从而达到更新其自己的效果。这就是观察者设计模式,有了这个基础再去看RxJava就会容易些了。
相关文章推荐
- Android开源—RXJava观察者设计模式
- Rxjava前哨——观察者设计模式
- 设计模式之观察者模式(Observer Pattern)(二)
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
- 设计模式随笔系列:气象站的故事-观察者模式(Observer)[原]
- 利用观察者模式设计仿真器内核接口
- .NET中的设计模式五:观察者模式
- 设计模式之Observer观察者模式
- 认识观察者模式(设计模式)[转载]
- 设计模式学习笔记(二十一)——Observer观察者
- .NET中的设计模式五:观察者模式 选择自 lane_cn 的 Blog
- 设计模式之观察者模式 (原创)
- 设计模式之观察者模式(Observer Pattern)(一)
- 设计模式之观察者模式
- IssueVision 学习笔记(三)-----设计模式之OBSERVER(观察者)模式
- 设计模式——观察者模式
- 探究观察者设计模式
- GEF框架中的设计模型(观察者模式)
- C#设计模式-观察者observer模式实现