Observer-观察者模式
概述:
发送状态变化通知
当观察对象的状态发生变化事,会通知观察者
说明:
1.本文仅仅是对 图解设计模式 的简单总结(个人笔记).
2.文章中的图片均来自本书,添加水印只是为了防止盗链行为,并无侵权的想法.
综上,若侵权, 请联系我删除!
转载请标注出处!
案例:
- 案例说明:
观察者将观察一个会生成数值的对象,并将他生成的数值结果显示出来
- 主要代码:
NumberGenerator:
package Gof.Observer;
import java.util.ArrayList;
import java.util.Iterator;
public abstract class NumberGenerator {
private ArrayList observers = new ArrayList(); // 保存Observer们
public void addObserver(Observer observer) { // 注册Observer
observers.add(observer);
}
public void deleteObserver(Observer observer) { // 删除Observer
observers.remove(observer);
}
public void notifyObservers() { // 向Observer发送通知
Iterator it = observers.iterator();
while (it.hasNext()) {
Observer o = (Observer)it.next();
o.update(this);
}
}
public abstract int getNumber(); // 获取数值
public abstract void execute(); // 生成数值
}
- 代码链接:传送门
uml综述
- Subject(观察对象): 定义了注册观察者和删除观察者的方法
- ConcreteSubject(具体的观察对象): 表示被观察对象, 当自身状态发生变化后,他会通知已经注册的Observer对象
- Observer(观察者): 负责接受来自subject对象的状态变化的通知
- ConcreteObserver:具体的Observer,当他的Update方法被调用时,回去获取要观察的对象的最新状态
收获:
- 可替换性设计思想:
- 利用抽象类和接口从具体类中抽出抽象方法
- 在将实例作为参数传递到类中,或者在类的字段中保存实例时,不使用具体类型,而是使用抽象类型和接口
- Subject状态变化 -> 通知Observer -> Observer调用Subject的方法 -> 导致Subject状态变化 -> 通知Observer …
相关设计模式:
- Mediator: 有时使用Observer模式实现Mediator角色与colleague角色之间的通信
注意:
此部分内容属于对GOF Design Pattern知识的初步认知阶段,参考书籍是结城浩的《图解设计模式》,简单易懂,十分推荐!
以上内容,作者一字一句码出来的,纯属不易,欢迎大家转载,转载是还请您表明出处。另外如果我有侵权行为,请在下方留言,确认后我会及时撤销相应内容,谢谢大家!
PS:欢迎大家来到我的小站,鸣谢!
猜你喜欢