java设计模式-观察者模式
2016-10-22 10:06
417 查看
大家可能都在用RxJava 或者是EventBus 吧!其实这两种工具都是运用的观察者模式,要想弄懂上面两个库,观察者模式是基础。接下来我就简单的介绍一下观察者模式。
观察者模式分为两个部分:观察者(observer)和被观察者(observable). 和我们平常使用的监听回调不同(一对一),观察者模式采用的是一对多的形式,当被观察者发生改变之后,发送消息给观察者,然后观察者做出相应的改变,这就是观察者模式。
示意图如下:
下面看一个简单的例子:
被观察者:
很简单,为了模仿一对多的环境,我们在被观察中,定义了一个集合,这个集合存储观察者对象。notifyAll()方法模式被观察者发生改变,通知观察者。
观察者:
测试代码:
运行结果
两个观察者订阅了一个被观察者,被观察者发生改变,发送信息给订阅的观察者。
JAVA中的实现类
其实在Java中有相应的类帮我们实现了设计模式,分别是Observer(观察者) 和 Observable(被观察者) .
下面看一个简单例子:
被观察者:
public class SubjectZD extends Observable {
public void notity(String name) {
<span style="color:#ff0000;"> setChanged();
notifyObservers(name);</span>
}
}
观察者:
public class ObserverZD implements Observer {
public SubjectZD mSubjectZD;
public ObserverZD(SubjectZD mSubjectZD) {
this.mSubjectZD = mSubjectZD;
mSubjectZD.addObserver(this);
}
@Override
public void update(Observable observable, Object data) {
if (observable instanceof SubjectZD) {
System.out.println("observable = " + data.toString());
}
}
}
测试代码:
SubjectZD subjectZD = new SubjectZD();
ObserverZD observerZD = new ObserverZD(subjectZD);
ObserverZD observerZD1 = new ObserverZD(subjectZD);
subjectZD.notity("我是谁");
observer 中主要有两个方法setChanged()和notifyObservers()就可以通知到Observer了。
ok 代码到此结束
有了这个基础我们就方便了解 RxJava 和 EventBus 了,
观察者模式分为两个部分:观察者(observer)和被观察者(observable). 和我们平常使用的监听回调不同(一对一),观察者模式采用的是一对多的形式,当被观察者发生改变之后,发送消息给观察者,然后观察者做出相应的改变,这就是观察者模式。
示意图如下:
下面看一个简单的例子:
被观察者:
public class Subject { private List<Observer> mObservers = new ArrayList<>(); /** * 绑定被观察者 * @param observer 观察者 */ public void attach(Observer observer) { mObservers.add(observer); } /** * 解绑定 * @param observer */ public void deAttach(Observer observer) { mObservers.remove(observer); } /** * 发送通知 * @param name */ public void notityAll(String name) { for (Observer observer : mObservers) { observer.update(name); } } }
很简单,为了模仿一对多的环境,我们在被观察中,定义了一个集合,这个集合存储观察者对象。notifyAll()方法模式被观察者发生改变,通知观察者。
观察者:
public class Observer { private Subject mSubject; public Observer(Subject mSubject) { this.mSubject = mSubject; } public void update(String name) { System.out.println(System.currentTimeMillis()+<span style="font-family: 'Microsoft YaHei';">"接收到了+ " + name);</span> } public void attachSubject() { if (mSubject != null) mSubject.attach(this); } public void deAttachSubject() { if (mSubject != null) mSubject.deAttach(this); } }
测试代码:
public class FourActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_four); Subject mSubject = new Subject(); Observer observer1 = new Observer(mSubject); observer.attachSubject(); Observer observer2 = new Observer(mSubject); observer1.attachSubject(); mSubject.notityAll("我是谁"); } }
运行结果
10-24 10:23:49.211 29086-29086/com.rxjava I/System.out﹕ 1477275829211接收到了+ 我是谁 10-24 10:23:49.211 29086-29086/com.rxjava I/System.out﹕ 1477275829211接收到了+ 我是谁
两个观察者订阅了一个被观察者,被观察者发生改变,发送信息给订阅的观察者。
JAVA中的实现类
其实在Java中有相应的类帮我们实现了设计模式,分别是Observer(观察者) 和 Observable(被观察者) .
下面看一个简单例子:
被观察者:
public class SubjectZD extends Observable {
public void notity(String name) {
<span style="color:#ff0000;"> setChanged();
notifyObservers(name);</span>
}
}
观察者:
public class ObserverZD implements Observer {
public SubjectZD mSubjectZD;
public ObserverZD(SubjectZD mSubjectZD) {
this.mSubjectZD = mSubjectZD;
mSubjectZD.addObserver(this);
}
@Override
public void update(Observable observable, Object data) {
if (observable instanceof SubjectZD) {
System.out.println("observable = " + data.toString());
}
}
}
测试代码:
SubjectZD subjectZD = new SubjectZD();
ObserverZD observerZD = new ObserverZD(subjectZD);
ObserverZD observerZD1 = new ObserverZD(subjectZD);
subjectZD.notity("我是谁");
observer 中主要有两个方法setChanged()和notifyObservers()就可以通知到Observer了。
ok 代码到此结束
有了这个基础我们就方便了解 RxJava 和 EventBus 了,
相关文章推荐
- java设计模式-观察者模式
- Java设计模式:单态模式,工厂模式,代理模式,观察者模式示例
- java常用类库续3(比较器Comparable、Comparator、观察者设计模式、正则表达式、定时调度)
- java设计模式:观察者模式(Observer)
- JAVA设计模式-观察者模式简单例子
- 使用观察者模式实现Java应用程序设计MVC模式
- Java设计模式_行为模式_观察者模式
- 设计模式---观察者模式(Observer Pattern with java)
- Java设计模式—观察者模式(Observer pattern)
- java 设计模式-观察者模式
- Java设计模式 -- 观察者模式(push方式)
- All About JAVA 关于设计模式中的“观察者模式”
- java设计模式_观察者模式
- Java设计模式-----Observer观察者模式
- Java设计模式之Observer 观察者模式
- Java设计模式 -- 观察者模式(pull方式)
- Java设计模式 Design Pattern:观察者模式 Observer Pattern
- Java设计模式 Design Pattern:观察者模式 Observer Pattern
- 【设计模式】observer观察者模式:模拟java.awt.Button事件监听。
- 设计模式---观察者模式(Observer Pattern with java)