观察者模式(订阅/注销模式)

Posted forSmile

tags:

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

package lyj.main;

public class App {

public static void main(String[] args) {

Subject subject=new Subject();

//广播接收器,观察者,订阅者
A a=new A(subject);
B b=new B(subject);

subject.setState(9);
subject.setState(999);
}
}

 

package lyj.main;


import java.util.ArrayList;

/**
* 主题
* @author Administrator
*
*/
public class Subject {

//状态
private int state;
public void setState(int state){
this.state=state;
notifiyobserver();
}
public int getState(){return state;}
//所有的观察者
private ArrayList<Observer> observers=new ArrayList<>();
/**
* 订阅
*/
public void attach(Observer observer){
observers.add(observer);
}
/**
* 注销
*/
public void deattach(Observer observer){
observers.remove(observer);
}
/**
* 通知所有观察者
*/
public void notifiyobserver(){
for(Observer observer:observers){
observer.updata();
}
}
}

 

package lyj.main;
/**
* 观察者,当主题改变的时候,得到视图的最新状态(视图)
* @author Administrator
*
*/

public abstract class Observer {

//观察的主题
Subject subject;
/**
* 父类订阅主题
* @param subject
*/
public Observer(Subject subject) {
// TODO Auto-generated constructor stub
this.subject=subject;
subject.attach(this);
}

/**
* 状态改变
*/
public abstract void updata();


}

 

package lyj.main;

public class A extends Observer{

public A(Subject subject) {
super(subject);
}

@Override
public void updata() {
System.out.println("A"+subject.getState());
}

}

 

package lyj.main;

public class B extends Observer{

public B(Subject subject) {
super(subject);
}

@Override
public void updata() {
// TODO Auto-generated method stub
System.out.println("B"+subject.getState());
}

}

以上是关于观察者模式(订阅/注销模式)的主要内容,如果未能解决你的问题,请参考以下文章

观察者模式 vs 发布-订阅模式

[设计模式]观察者模式与订阅模式

设计模式 - 发布-订阅者模式

模式发布与订阅模式和观察者模

设计模式--观察者模式(发布订阅模式)

设计模式-观察者模式 发布/订阅模式