论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
分布式数据库
›
赤壁之战的烽火台 - 观察者模式
赤壁之战的烽火台 - 观察者模式
没腿的鸟
金牌会员
|
2024-7-12 08:23:35
|
显示全部楼层
|
阅读模式
楼主
主题
972
|
帖子
972
|
积分
2916
“当烽火连三月,家书抵万金;设计模式得其法,千军如一心。”
在波澜壮阔的三国汗青长河中,赤壁之战无疑是一场改变乾坤的紧张战役。而在这场战役中,一个看似简单却至关紧张的系统发挥了巨大作用——烽火台。这个古老的通讯系统,是否让你遐想到了现代软件设计中的观察者模式?今天,让我们穿越千年,从烽火台的烟雾中,揭开观察者模式的神秘面纱。
赤壁江畔战云起,
烽火一燃天下知。
观察变化随机应,
一招制敌保江山。
烽火连天
公元 208 年,曹操带领雄师南下,意图一举荡平江东,同一天下。面对来势汹汹的曹军,孙刘联军不得不精心策划,以弱胜强。
"若要及时应对曹军的动向,必须构建一个高效的预警系统。"周瑜皱眉沉思。
诸葛亮轻摇羽扇,胸有成竹地说:“依我之见,可在沿江设立烽火台。一旦发现敌情,就点燃烽火。烟起之处,必有敌军。”
周瑜眼前一亮:“妙哉!如此一来,我军可随时掌握敌军动向,做到有备无患。”
就如许,一个个烽火台如同哨兵一般,矗立在长江沿岸。每个烽火台都配备了专人日夜值守,一旦发现曹军动向,立即点燃烽火。
某日,最前线的烽火台保卫突然发现曹军前锋部队的踪迹。
"快!点燃烽火!"保卫大喊。
刹那间,滚滚浓烟冲天而起。紧接着,第二个、第三个烽火台接连点燃,烟雾信号如同多米诺骨牌一般灵敏通报。
江畔军帐内,周瑜正在与诸葛亮商量军情。突然,一名士兵急遽跑来:
“报!前线烽火大起,曹军已至!”
周瑜与诸葛亮相视一笑,胸有成竹地说:“传令下去,按计行事!”
观察者模式分析
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会关照所有观察者对象,使它们可以或许主动更新自己。
在赤壁之战的烽火台系统中,我们可以清晰地看到观察者模式的影子:
烽火台就是被观察的主题(Subject)
各个军事单位(如周瑜、诸葛亮的指挥部)就是观察者(Observer)
烽火的点燃就是状态的改变
烟雾信号的通报就是关照机制
让我们用一个类图来理解观察者模式的结构:
代码实现
让我们用 Java 来实现这个烽火台系统:
import java.util.ArrayList;
import java.util.List;
// 观察者接口
interface MilitaryUnit {
void update(String message);
}
// 主题(烽火台)
class BeaconTower {
private List<MilitaryUnit> observers = new ArrayList<>();
private String message;
public void attach(MilitaryUnit observer) {
observers.add(observer);
}
public void detach(MilitaryUnit observer) {
observers.remove(observer);
}
public void notify(String message) {
this.message = message;
for (MilitaryUnit observer : observers) {
observer.update(message);
}
}
public void signalEnemyMovement(String message) {
System.out.println("烽火台: " + message);
notify(message);
}
}
// 具体观察者
class CommandCenter implements MilitaryUnit {
private String name;
public CommandCenter(String name) {
this.name = name;
}
@Override
public void update(String message) {
System.out.println(name + " 收到消息: " + message);
}
}
// 主类
public class ObserverPatternDemo {
public static void main(String[] args) {
BeaconTower beaconTower = new BeaconTower();
CommandCenter zhouYu = new CommandCenter("周瑜");
CommandCenter zhuGeLiang = new CommandCenter("诸葛亮");
beaconTower.attach(zhouYu);
beaconTower.attach(zhuGeLiang);
beaconTower.signalEnemyMovement("曹军前锋已到达赤壁!");
}
}
复制代码
运行结果
烽火台: 曹军前锋已到达赤壁!
周瑜 收到消息: 曹军前锋已到达赤壁!
诸葛亮 收到消息: 曹军前锋已到达赤壁!
复制代码
观察者模式的妙用
通过赤壁之战的烽火台系统,我们可以看到观察者模式的几个关键优点:
解耦合
:烽火台(主题)不需要知道详细有哪些军事单位(观察者)在监听它,军事单位也不需要了解烽火台的内部实现。这种松耦合的设计提高了系统的灵活性。
可扩展性
:如果需要增加新的相应单位(如后勤部门),只需创建新的观察者并注册到烽火台,而不需要修改现有代码。
广播通信
:一个消息可以灵敏传达给多个接收者,就像烽火一起,整个防线都能快速得知敌情。
相应式设计
:观察者模式非常得当实现相应式的系统设计,当状态变化时,所有相关部门都能及时更新。
结语
诸葛亮的烽火台系统不但助力赤壁之战取得胜利,也为我们揭示了观察者模式的精髓。在现代软件开发中,观察者模式被广泛应用于图形用户界面、事件处置惩罚系统、消息推送服务等多个范畴。
正所谓"运筹帷幄之中,决胜千里之外",掌握了观察者模式,我们就能构建出反应灵敏、结构优良的软件系统,在瞬息万变的数字战场中立于不败之地。
在下一章中,我们将继承我们的设计模式之旅,探索更多三国聪明与现代软件设计的精妙结合。敬请等待!
参考原文:https://offernow.cn
AI学习助手:https://aistar.cool
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
没腿的鸟
金牌会员
这个人很懒什么都没写!
楼主热帖
CVE-2022-23131 Zabbix SAML SSO认证绕 ...
iOS全埋点解决方案-采集崩溃 ...
同一个网络下两台设备看直播时,进度不 ...
iOS 苹果集成登录及苹果图标的制作要求 ...
Doris(七) -- 修改表、动态和临时分区 ...
【密码管理器】上海道宁为您提供存储和 ...
java代码审计-XSS
北斗授时产品(GPS北斗授时设备)加NTP ...
K8S 性能优化-K8S Node 参数调优 ...
【ollama】Linux下更改ollama模型下载 ...
标签云
运维
CIO
存储
服务器
浏览过的版块
物联网
SQL-Server
人工智能
linux
运维.售后
云原生
快速回复
返回顶部
返回列表