观察者模式

2018-12-10  本文已影响0人  小菜鸟学Android

定义

以上图片来自百度百科。

这个模式主要处理一对多的依赖关系。一个对象状态改变时,其他的依赖对象也做出相应的处理。

模式结构

Subject:目标

抽象的目标主要抽象的是观察这个的注册和注销,然后一个通知更新的方法

publicinterfaceSubject{

/**

* 注册观察者

* @param observer

*/

voidregisterObserver(Observer observer);

/**

*  取消观察者

* @param observer

*/

voidremoveObserver(Observer observer);

/**

* 通知更新

*/

voidnotifyObservers();

}

ConcreteSubject: 具体目标

publicclassNotifyObserverimplementsSubject{

privateListmObservers;

publicNotifyObserver(){

mObservers =newArrayList<>();

}

@Override

publicvoidregisterObserver(Observer observer){

mObservers.add(observer);

}

@Override

publicvoidremoveObserver(Observer observer){

inti = mObservers.indexOf(observer);

if(i >=0) {

mObservers.remove(observer);

}

}

@Override

publicvoidnotifyObservers(){

System.out.print(" >>>>>mObservers.size()>>>>>>>"+ mObservers.size());

System.out.println();

for(Observer o: mObservers) {

o.update("在吗????");

}

}

}

Observer: 观察者

抽象的观察者,所有观察者共同拥有的一个接口。

publicinterfaceObserver{

/**

* 处理逻辑

* @param s

*/

voidupdate(String s);

}

ConcreteObserver: 具体观察者

观察者A

publicclassObserverAimplementsObserver{

Subject mSubject;

publicObserverA(Subject subject){

mSubject = subject;

mSubject.registerObserver(this);

}

@Override

publicvoidupdate(String s){

System.out.println("ObserverA:"+ s);

}

}

观察者B

publicclassObserverBimplementsObserver{

Subject mSubject;

publicObserverB(Subject subject){

mSubject = subject;

mSubject.registerObserver(this);

}

@Override

publicvoidupdate(String s){

System.out.println("ObserverB : "+ s);

}

}

测试代码

publicclassTest{

publicstaticvoidmain(String[] args){

Subject subject =newNotifyObserver();

Observer observerA =newObserverA(subject);

Observer observerB =newObserverB(subject);

// 通知更新

subject.notifyObservers();

//移除监听

subject.removeObserver(observerA);

System.out.println(">>>>>>>>>>>>>>>>>");

subject.notifyObservers();

}

}

测试结果

>>>>>mObservers.size()>>>>>>>2

ObserverA:在吗????

ObserverB : 在吗????

>>>>>>>>>>>>>>>>>

>>>>>mObservers.size()>>>>>>>1

ObserverB : 在吗????

上一篇 下一篇

猜你喜欢

热点阅读