简易的设计模式——观察者模式
观察者模式(Observer Pattern)也叫做发布订阅模式。
定义
定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则依赖于它的对象都会得到通知并被自动更新。
几种角色
在观察者模式中有这么几种角色:
- Subject被观察者:定义被观察者必须能动态地增加和删除观察者,一般为抽象类。
- Observer观察者:观察者接受到消息之后,能对接受到得消息进行处理。
- ConcreteSubject具体的被观察者:定义被观察者自己的业务逻辑,同时定义哪些事件需要进行通知。
- ConcreteObserver具体的观察者:在接收到消息之后,对消息进行不同的处理。
代码实现
观察者 Observer.java
public interface Observer {
public void update();
}
具体的观察者 ConcreteObserver.java
public class ConcreteObserver implements Observer {
@Override
public void update() {
System.out.println("接收到消息,并进行处理!");
}
}
被观察者 Subject.java
import java.util.Vector;
public abstract class Subject {
//也可以使用ArrayList,ArrayList是线程异步的,不安全。
private Vector<Observer> obsVector = new Vector<Observer>();
public void addObserver(Observer observer){
this.obsVector.add(observer);
}
public void delObserver(Observer observer){
this.obsVector.remove(observer);
}
public void notifyObservers(){
for (Observer observer: this.obsVector ){
observer.update();
}
}
}
具体的被观察者 ConcreteSubject.java
public class ConcreteSubject extends Subject {
public void doSomething(){
//do something
super.notifyObservers();
}
}
场景类 Client.java
public class Client {
public static void main(String args[]){
ConcreteSubject subject = new ConcreteSubject();
ConcreteObserver observer = new ConcreteObserver();
subject.addObserver(observer);
subject.doSomething();
}
}
观察者模式的优点
-
观察者和被观察者之间是抽象耦合
即使不断增加观察者还是被观察者非常容易扩展
-
建立一套触发机制
根据单一职责原则,每个类的职责是单一的,通过一个触发机制,形成触发链。观察者就可以实现这种链式结构。
观察者模式的缺点
- 观察者模式需要考虑一下开发效率和运行效率,当形成多级触发的时候,效率会令人担忧。消息的通知可以采用异步的方式进行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?