首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
软件与程序人生
›
DevOps与敏捷开发
›
计划模式(举动型)-观察者模式
返回列表
发新帖
计划模式(举动型)-观察者模式
[复制链接]
发表于 2025-10-12 07:41:45
|
显示全部楼层
|
阅读模式
目次
界说
类图
脚色
Subject:抽象主题(抽象被观察者)
ConcreteSubject:详细主题(详细被观察者)
Observer:抽象观察者
ConcrereObserver:详细观察者
优缺点
优点
缺点
使用场景
代码
示例
总结
界说
观察者模式界说了对象间的一种一对多的依靠关系,当一个对象(被观察者)的状态发生改变时,全部依靠于它的对象(观察者)都将得到关照并被自动更新。这种模式又被称为
发布
- 订阅(Publish/Subscribe)模式。它使得被观察者和观察者之间实现了松耦合,被观察者无需知道详细的观察者是谁,只需专注于自身状态的厘革,而观察者则专注于对状态厘革的相应。
比方,在一个消息
发布
体系中,消息机构是被观察者,而浩繁订阅该消息机构的用户则是观察者。当消息机构
发布
了一条新的消息(状态改变),全部订阅的用户都会收到关照并更新自己的消息列表(自动更新)。
类图
脚色
Subject:抽象主题(抽象被观察者)
抽象主题脚色负责管理全部观察者对象,它将全部观察者对象生存在一个聚集里。每个主题都可以拥有恣意数目的观察者。抽象主题提供了增长和删除观察者对象的接口,如许观察者可以动态地注册和注销对主题的观察。比方,在一个图形绘制体系中,图形对象可以作为抽象主题,而对图外形态感爱好的各种监听器就是观察者。图形对象提供了添加和移除监听器的方法。
ConcreteSubject:详细主题(详细被观察者)
详细主题是抽象主题的详细实现。它负责将有关状态存入详细观察者对象。当详细主题的内部状态发生改变时,它会给全部注册过的观察者发送关照。比如在一个股票买卖业务体系中,股票对象就是详细主题,当股票代价发生厘革(内部状态改变)时,它会关照全部关注该股票的投资者(观察者)。
Observer:抽象观察者
抽象观察者是全部详细观察者的抽象类。它界说了一个更新接口,当观察者得到主题更改关照时,将通过这个接口来更新自己。比方,在一个天气监测体系中,各种表现天气信息的组件都可以看作是观察者,它们都实现了抽象观察者界说的更新接口,以便在天气数据(主题)发生厘革时更新自己的表现内容。
ConcrereObserver:详细观察者
详细观察者实现了抽象观察者界说的更新接口。在得到主题更改关照时,详细观察者会根据关照内容更新自身的状态。比如在一个交际媒体平台中,用户的个人页面就是详细观察者,当用户发布了新动态(主题状态改变),关注该用户的其他用户的页面(详细观察者)会通过更新接口获取新动态并更新表现。
优缺点
优点
实现了观察者和被观察者之间的抽象耦合:被观察者只必要关注自身状态的厘革,而无需关心详细的观察者是谁以及怎样处理处罚状态厘革。观察者也只需实现同一的更新接口,不依靠于被观察者的详细实现。这使得体系的扩展性和维护性大大进步。比方,在一个游戏开辟中,游戏脚色(被观察者)的状态厘革可以关照各种差别的游戏元素(观察者),如场景殊效、音效等,而游戏脚色无需知道这些详细的观察者细节。
动态联动:观察者可以根据必要动态地注册和注销对主题的观察。这意味着体系可以根据运行时的需求机动地调解观察者和被观察者之间的关系。比如在一个及时
监控
体系中,新的
监控
装备(观察者)可以随时接入体系并开始观察特定的被
监控
对象(主题),而当装备故障或不再必要时也可以方便地注销。
广播通讯:被观察者会向全部登记的观察者发出关照,这种广播机制使得信息可以或许高效地传播给全部相干的对象。在一个分布式体系中,一个节点(被观察者)的状态厘革可以通过观察者模式快速关照到其他相干节点(观察者),实现体系的同等性和协同工作。
缺点
开辟和调试复杂性:在应用观察者模式时,由于步调中包罗一个被观察者和多个观察者,开辟和调试的难度会增长。必要过细处理处罚观察者的注册、注销以及关照的次序等题目,否则大概会出现意想不到的错误。比方,在一个大型电商体系中,订单状态的厘革(被观察者)会关照多个模块(观察者),如库存管理、物流配送等,对这些复杂关系的调试必要淹灭更多的时间和精力。
运行服从题目:当观察者数目浩繁时,每次被观察者状态改变都要关照全部观察者,大概会导致
性能
降落。特殊是在关照过程中如果存在复杂的业务逻辑,这种影响会更加显着。比如在一个交际网络平台中,一个热门用户的动态更新(被观察者)大概会关照成千上万的粉丝(观察者),如果处理处罚不当,大概会造成体系相应变慢。别的,在一些编程语言中,消息关照默认是次序实行的,一个观察者的卡顿会影响团体的实行服从。
使用场景
关联举动场景:当体系中存在多个对象之间存在关联举动,且这些举动是可拆分的,而不是 “组合” 关系时,得当使用观察者模式。比方,在一个音乐播放软件中,播放列表(被观察者)的厘革(如添加、删除歌曲)会同时影响播放进度条、歌曲信息表现等多个组件(观察者),这些组件的举动是相互关联但又可独立厘革的。
事故多级触发场景:在一些复杂的业务场景中,一个事故的发生大概会触发一系列的后续事故,观察者模式可以很好地处理处罚这种多级触发的环境。比如在一个工作流管理体系中,使命状态的改变(被观察者)大概会触发审批流程、关照相干职员等多个后续事故(观察者),这些事故又大概进一步触发其他事故。
跨体系的消息交换场景:如消息队列、事故总线的处理处罚机制中,观察者模式被广泛应用。差别的体系可以作为观察者订阅特定的消息主题(被观察者),当主题有新消息发布时,订阅的体系会收到关照并举行相应处理处罚。比方,在一个
微服务
架构的电商体系中,订单服务(被观察者)可以通过消息队列向库存服务、付出服务等多个其他服务(观察者)发送订单状态厘革的消息。
代码
示例
以下是一个使用 Java 语言实现观察者模式的简朴示例:
import java.util.ArrayList;
import java.util.List;
// 抽象主题
abstract class Subject {
private List<Observer> observers = new ArrayList<>();
public void attach(Observer observer) {
observers.add(observer);
}
public void detach(Observer observer) {
observers.remove(observer);
}
public void notifyObservers() {
for (Observer observer : observers) {
observer.update(this);
}
}
public abstract int getState();
}
// 具体主题
class ConcreteSubject extends Subject {
private int state;
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
notifyObservers();
}
}
// 抽象观察者
interface Observer {
void update(Subject subject);
}
// 具体观察者
class ConcreteObserver implements Observer {
private int observerState;
@Override
public void update(Subject subject) {
observerState = ((ConcreteSubject) subject).getState();
System.out.println("观察者状态更新为: " + observerState);
}
}
复制
代码
在上述代码中,Subject类是抽象主题,界说了添加、删除观察者以及关照观察者的方法。ConcreteSubject是详细主题,实现了Subject的抽象方法,并在状态改变时关照观察者。Observer是抽象观察者接口,界说了更新方法。ConcreteObserver是详细观察者,实现了Observer接口的更新方法,根据主题的状态更新自身状态。
通过以下测试代码可以验证观察者模式的运行:
public class Main {
public static void main(String[] args) {
ConcreteSubject subject = new ConcreteSubject();
ConcreteObserver observer = new ConcreteObserver();
subject.attach(observer);
subject.setState(10);
}
}
复制代码
当subject的状态被设置为 10 时,会自动关照observer,observer会更新自身状态并输出相应信息。
总结
观察者模式作为一种强大的计划模式,通过界说对象间的一对多依靠关系,实现了对象之间的解耦,进步了体系的机动性和可维护性。只管在应用过程中必要注意开辟和调试的复杂性以及运行服从题目,但在符合的场景下,观察者模式可以或许极大地提升软件体系的质量和可扩展性。无论是在小型应用照旧大型分布式体系中,观察者模式都有着广泛的应用远景,是开辟者在软件计划过程中不可或缺的工具之一。盼望通过本文的先容,读者可以或许对观察者模式有更深入的明白,并在现实项目中机动运用这一模式。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
回复
使用道具
举报
返回列表
渣渣兔
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表