进阶3_RxJava1_观察者设计模式
来源:互联网 发布:远程数据传输软件 编辑:程序博客网 时间:2024/06/05 19:04
进阶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就会容易些了。
- 进阶3_RxJava1_观察者设计模式
- Android 进阶之路:常见设计模式之观察者模式
- 设计模式-3-观察者模式
- 设计模式(3)--观察者模式
- java设计模式(3)--观察者模式
- 设计模式(3)观察者模式
- 一天一个设计模式(3):观察者模式
- 设计模式:3)观察者模式
- 3、设计模式之观察者模式
- java设计模式(3) - 观察者模式(Observer)
- C#设计模式- 观察者模式(3)
- JAVA设计模式示例-3 观察者模式
- java设计模式(3)观察者模式
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- org.osgi.core关键源码分析
- 更新BP银行数据
- 运营方案写作技巧
- Excel常用小技巧
- ipv6无法使用的解决办法
- 进阶3_RxJava1_观察者设计模式
- android wifi 网络检测
- java 重定向和转发的区别
- cdh 5.8 hbase安装Phoenix 4.8的过程
- Paxos Made Simple【中文翻译注解】
- UESTC 1594 老司机的奇幻漂流 并查集+食物链
- 中国茅台葡萄酒历史值得你看看
- mybatis的insert元素属性详解 及 在insert插入数据获取主键id的值
- HDFS之SequenceFile和MapFile