RxJava系列之一:观察者模式
2016-01-31 16:50
369 查看
一.什么是RxJava
RxJava是一个采用观察者设计模式的变成框架,自然少不了对于观察者设计模式的讲解。下面就简单先对观察者设计模式进行简单的介绍。
二.观察者(Observer)设计模式简介
(一).基本原理描述
Observer模式是二十三中Java编程设计模式中的一种。
Observer设计模式的有点:解除了观察者与被观察者之间的耦合关系,被观察者不需要知道观察者的任何信息。被观察者只需要允许观察者监听相应的事件,被观察者可以有多个观察者。简单的理解为观察者实在监听被观察者状态的改变。被观察者简单的将事件传递给每一个观察者。
(二).代码简单实现
a.定义一个观察者接口
public interface Observer {
public void update();
}
b.两个实现类
public class Observer1 implements Observer {
@Override
public void update() {
System.out.println("观察者1");
}
}
public class Observer2 implements Observer {
@Override
public void update() {
System.out.println("观察者2");
}
}
Subject接口及实现类:
public interface Subject {
/*增加观察者*/
public void add(Observer observer);
/*删除观察者*/
public void del(Observer observer);
/*通知所有的观察者*/
public void notifyObservers();
/*自身的操作*/
public void operation();
}
public abstract class AbstractSubject implements Subject {
private Vector<Observer> vector = new Vector<Observer>();
@Override
public void add(Observer observer) {
vector.add(observer);
}
@Override
public void del(Observer observer) {
vector.remove(observer);
}
@Override
public void notifyObservers() {
Enumeration<Observer> enumo = vector.elements();
while(enumo.hasMoreElements()){
enumo.nextElement().update();
}
}
}
public class MySubject extends AbstractSubject {
@Override
public void operation() {
System.out.println("自身操作");
notifyObservers();
}
}
程序主入口:
public class ObserverTest {
public static void main(String[] args) {
Subject sub = new MySubject();
sub.add(new Observer1());
sub.add(new Observer2());
sub.operation();
}
}
最后输出结果为:
自身操作
观察者1
观察者2
最后代码没有多复杂,多加用断点跟进程序就能接单的了解观察者模式!
RxJava是一个采用观察者设计模式的变成框架,自然少不了对于观察者设计模式的讲解。下面就简单先对观察者设计模式进行简单的介绍。
二.观察者(Observer)设计模式简介
(一).基本原理描述
Observer模式是二十三中Java编程设计模式中的一种。
Observer设计模式的有点:解除了观察者与被观察者之间的耦合关系,被观察者不需要知道观察者的任何信息。被观察者只需要允许观察者监听相应的事件,被观察者可以有多个观察者。简单的理解为观察者实在监听被观察者状态的改变。被观察者简单的将事件传递给每一个观察者。
(二).代码简单实现
a.定义一个观察者接口
public interface Observer {
public void update();
}
b.两个实现类
public class Observer1 implements Observer {
@Override
public void update() {
System.out.println("观察者1");
}
}
public class Observer2 implements Observer {
@Override
public void update() {
System.out.println("观察者2");
}
}
Subject接口及实现类:
public interface Subject {
/*增加观察者*/
public void add(Observer observer);
/*删除观察者*/
public void del(Observer observer);
/*通知所有的观察者*/
public void notifyObservers();
/*自身的操作*/
public void operation();
}
public abstract class AbstractSubject implements Subject {
private Vector<Observer> vector = new Vector<Observer>();
@Override
public void add(Observer observer) {
vector.add(observer);
}
@Override
public void del(Observer observer) {
vector.remove(observer);
}
@Override
public void notifyObservers() {
Enumeration<Observer> enumo = vector.elements();
while(enumo.hasMoreElements()){
enumo.nextElement().update();
}
}
}
public class MySubject extends AbstractSubject {
@Override
public void operation() {
System.out.println("自身操作");
notifyObservers();
}
}
程序主入口:
public class ObserverTest {
public static void main(String[] args) {
Subject sub = new MySubject();
sub.add(new Observer1());
sub.add(new Observer2());
sub.operation();
}
}
最后输出结果为:
自身操作
观察者1
观察者2
最后代码没有多复杂,多加用断点跟进程序就能接单的了解观察者模式!
相关文章推荐
- java的反射机制(含数组参数)
- MyEclipse new 后面的菜单选项设置
- 深入理解Java内存模型(二)——重排序
- LeetCode算法练习题Java
- java BigInteger源码学习
- Spring,hibernate,struts的面试笔试题(含答案)
- java Integer 源码学习
- Java中的栈,堆,方法区和常量池
- 从头认识Spring-1.8 怎样利用AOP记录日志?
- 深入理解Java内存模型(一)——基础
- eclipse 选项设置
- spring框架--AOP
- java hdu2188 巴特博弈
- Java设计模式(十二)----享元模式
- java日期计算和比较
- Java 正则 去前后空格 回车
- java_70-73_annotation+Exception
- hdu2188 java
- 从头认识Spring-1.7 怎样通过属性注入Bean?(2)-怎样通过属性向对象注入另一个对象的引用?
- SSH学习——Struts2拦截器实现登录权限验证