观察者模式

定义

以上图片来自百度百科。

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

模式结构

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 : 在吗????

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通...
    扈扈哈嘿阅读 5,152评论 0 12
  • 客户需求 程序设计 一个气象站对应着多个客户端,气象站的数据一发生变化,客户端的数据也要随着更新,这就形成了一种依...
    BlainPeng阅读 4,624评论 1 17
  • 观察者模式 Rxjava中运用到了观察者模式,那什么是观察者模式呢,现在来学习一下。正所谓观察,就是看,细察事物的...
    cgzysan阅读 3,621评论 0 4
  • 概念:   定义了对象之间一对多依赖,这样一来,当一个对象改变状态时,他的所有依赖着都会收到通知并自动更新。观察者...
    暴走的小陌阅读 2,523评论 0 2
  • 【归类记录】今天读完《For the king》之后,贝贝马上想起之前和她一起做了字母发音归类的书,说妈妈我们把K...
    幸福满屋Emily阅读 1,508评论 0 0

友情链接更多精彩内容