设计模式之观察者模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之观察者模式相关的知识,希望对你有一定的参考价值。

1、概念(百科)

观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。

2、实现方式

观察者模式包含有两个角色:观察者(Observer)和目标者[/被观察者](Subject),二者之间存在“观察”的逻辑关联,当目标状态发生变化时,所有依赖于目标的对象都会得到通知并自动刷新。

3、大致过程

技术分享

涉及角色:

3.1 目标者(Subject)抽象类,包括对观察者的注册,撤销和发送通知

3.2 具体目标(ConcreteSubject)记录目标者的相关状态。在状态更新时,通知所有注册在本目标的观察者

3.3 观察者(Observer)为所有观察者定义一个接口,得到状态更新时更新自己

3.4 具体观察者(ConcreteObserver)实现抽象观察者所要求的更新接口,以便使本身的状态和主题状态协调


4、相关代码

4.1 目标者代码

import java.util.ArrayList;

import java.util.List;


public abstract class Subject {

private List<Observer> observers = new ArrayList<Observer>();


public void attach(Observer observer) {

this.observers.add(observer);

}


public void dettach(Observer observer) {

this.observers.remove(observer);

}


protected void notifyObservers() {

for(Observer observer:observers){

observer.update(this);

}

}


}


public class ConstreteSubject extends Subject {

//目标对象的状态

private String subjectState;

/**

* @return the subjectState

*/

public String getSubjectState() {

return subjectState;

}


/**

* @param subjectState the subjectState to set

*/

public void setSubjectState(String subjectState) {

this.subjectState = subjectState;

this.notifyObservers();

}


}


4.2 观察者代码

public interface Observer {

/**

* 更新的接口

* @param subject传入目标对象,方便获取响应的目标对象的状态

*/

public void update(Subject subject);


}



public class ConstreteObserver implements Observer {

/**

     * 获取目标类的状态同步到观察者的状态

     */

@Override

public void update(Subject subject) {

   System.out.println("观察者收到目标者的更新状态是:" + ((ConstreteSubject)subject).getSubjectState());

}


}


以上是关于设计模式之观察者模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之观察者模式

python设计模式之观察者模式

设计模式之观察者模式

戏说模式之:观察者模式(三体)

Android开发模式之观察者模式

Java设计模式之观察者模式