设计模式之观察者模式
Posted JKerving
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式之观察者模式相关的知识,希望对你有一定的参考价值。
观察者模式无外乎两个操作,observer订阅自己关心的主题、主题有变化后通知订阅此主题的observers。
首先创建主题,主题中需要持有观察者列表的引用,用于在有状态或数据变化后通知到所有订阅此主题的观察者们。
public class Subject {
private List<Observer> observers = new ArrayList<Observer>();
private int state;
public int getState(){
return state;
}
public void setState(int state){
this.state=state;
notifyAllObservers();
}
public void attach(Observer observer){
observers.add(observer);
}
private void notifyAllObservers() {
for(Observer observer:observers){
observer.update();
}
}
}
定义观察者接口
public abstract class Observer {
protected Subject subject;
public abstract void update();
}
接下来定义几个不同的观察者类
public class BinaryObserver extends Observer{
public BinaryObserver(Subject subject){
this.subject=subject;
this.subject.attach(this);
}
@Override
public void update() {
String result = Integer.toBinaryString(subject.getState());
System.out.println("订阅的数据发生变化,新的数据处理为二进制值为:"+result);
}
}
public class HexaObserver extends Observer{
public HexaObserver(Subject subject){
this.subject=subject;
this.subject.attach(this);
}
@Override
public void update() {
String result = Integer.toHexString(subject.getState()).toUpperCase();
System.out.println("订阅的数据发生变化,新的数据处理为十六进制值为:"+result);
}
}
client端调用
public class client {
public static void main(String[] args){
Subject subject = new Subject();
new BinaryObserver(subject);
new HexaObserver(subject);
subject.setState(12);
}
}
输出为
大家只要记住最核心的部分,一定有一个地方存放了所有的观察者,然后在事件发生的时候,遍历观察者,调用它们的回调函数。
以上是关于设计模式之观察者模式的主要内容,如果未能解决你的问题,请参考以下文章