行为型设计模式主要包括
行为型
观察者
定义对象间的一种一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都得到通知
- 依赖关系
多个观察者 Observer Implements
—依赖—> 数据对象 Subject Implement
构造方法传参构造Subject成员变量,并将自己注册在Subject的观察者列表
class ObserverImpl1 implements Observer{ private Subject subject; public ObserverImpl1(Subject subject){ this.subject = subject; this.subject.addObserver(this); } }
|
- 变化通知
数据对象变化 Subject Implement
—通知—> 多个观察者
`setXX()` `notifyObservers()`
- Code Demo
Subject
interface Subject{ void addObserver(Observer observer); void removeObserver(Observer observer); void notifyObservers();
}
|
Subject Implement
class DataSubject implements Subject{
private List<Observer> observers;
private Object data;
public DataSubject(){ observers = new ArrayList(); } @Override void addObserver(Observer observer){ observers.add(observer); } @Override void removeObserver(){
}
@Override void notifyObservers(){ observers.stream() .filter(Objects::nonNull) .forEach(o -> o.update()); }
void setData(Object data){ this.data = data; notifyObservers(); }
}
|
Observer
interface Observer{
void update();
}
|
Observer Implements
class ObserverImpl1 implements Observer{
private Subject subject;
public ObserverImpl1(Subject subject){ this.subject = subject; this.subject.addObserver(this); }
@Override public void update(){ }
}
class ObserverImpl2 implements Observer{
private Subject subject;
public ObserverImpl2(Subject subject){ this.subject = subject; this.subject.addObserver(this); }
@Override public void update(){ }
}
|
气象站 – 程序入口
气象站测得数据后,要显示在显示板上
温度 当前状态显示板 湿度 -> 数据 -> 气相统计显示板 压强 简单预报显示板
|
- Java原生
java.util.Observable -> Subejct java.util.Observer -> Observer
|
但是由于 Observable
是一个类,而Java是单继承的继承方式,耦合度太强,所以基本不建议使用
访问者
策略
模板方法
状态
备忘录
中介
迭代器
解释器
责任链
本文标题:设计模式之行为型
文章作者:Shea
原始链接:https://di1shuai.com/设计模式之行为型.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!