美文网首页
观察者模式

观察者模式

作者: 小菜鸟学Android | 来源:发表于2018-12-10 21:18 被阅读0次

定义

以上图片来自百度百科。

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

模式结构

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

相关文章

  • 11.9设计模式-观察者模式-详解

    设计模式-观察者模式 观察者模式详解 观察者模式在android中的实际运用 1.观察者模式详解 2.观察者模式在...

  • RxJava基础—观察者模式

    设计模式-观察者模式 观察者模式:观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式...

  • 前端面试考点之手写系列

    1、观察者模式 观察者模式(基于发布订阅模式) 有观察者,也有被观察者。 观察者需要放到被观察者列表中,被观察者的...

  • RxJava 原理篇

    一、框架思想 观察者模式观察者自下而上注入被观察者被观察者自上而下发射事件观察者模式 装饰器模式自上而下,被观察者...

  • 观察者模式

    观察者模式概念 观察者模式是对象的行为模式,又叫作发布-订阅(publish/subscrible)模式。 观察者...

  • 设计模式-观察者模式

    观察者模式介绍 观察者模式定义 观察者模式(又被称为发布-订阅(Publish/Subscribe)模式,属于行为...

  • 观察者模式

    观察者模式 观察者模式的定义 观察者模式(Observer Pattern)也叫做发布订阅模式(Publish/s...

  • iOS设计模式之观察者模式

    观察者模式 1、什么是观察者模式 观察者模式有时又被称为发布(publish)-订阅(Subscribe)模式、模...

  • 观察者模式和发布订阅模式区别

    观察者模式 所谓观察者模式,其实就是为了实现松耦合(loosely coupled)。 在观察者模式中,观察者需要...

  • RxJava(二)

    一、观察者模式 1.1、传统的观察者模式 1.2、RxJava 的观察者模式 区别传统的观察者模式是一个 Obse...

网友评论

      本文标题:观察者模式

      本文链接:https://www.haomeiwen.com/subject/jzzdhqtx.html