面向对象实践“观察者模式”
原文链接:https://blog.csdn.net/liuyukuan/article/details/124087205
【扩展视频教程】
「观察者模式」与「发布/订阅模式」,你分得清楚吗:https://www.bilibili.com/video/BV14z421k7hv/
观察者模式(Observer)
观察者模式(发布-订阅模式):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发送变化时,会通知所有观察者对象,让它们能够自动更新自己
————————————————
案例:
珠宝商运送一批钻石,有黄金强盗准备抢劫,珠宝商雇佣了私人保镖,警察局也派人护送,于是当运输车上路的时候,强盗保镖警察都要观察运输车一举一动。
————————————————
程序:
1. 抽象的被观察者watched接口,有addWatcher,deleteWatch,notifyWatch方法
2. 抽象的观察者watcher接口,update方法
3. 具体的被观察者Transporter实现watched接口
4. 三个具体的观察者实现watcher,有具体的update方法
5. 测试类
————————————————
;抽象观察者 Class Watcher { update() { } } ;具体观察者:警察 class Police extends Watcher { update() { MsgBox % "运输车有行动,警察护航" } } ;具体观察者:强盗 class Thief extends Watcher { update() { MsgBox % "运输车有行动,强盗准备动手" } } ;具体观察者:保镖 class Security extends Watcher { update() { MsgBox % "运输车有行动,保安贴身保护" } } ;抽象的被观察者 class Watched { AddWatcher(_watcher) {} removeWatcher(_watcher) {} notifyWatchers() { } } ;具体的被观察者 class Transporter extends Watched { list:={} AddWatcher(_watcher) { this.list.Push(_watcher) } removeWatcher(_watcher) { for k,v in this.list { if (v=_watcher) { ;~ MsgBox 取消注册. this.list.remove(k) return } } MsgBox 没有注册. } notifyWatchers() { for _,_watcher in this.list _watcher.update() } } class Test { main() { _transporter:=new Transporter() _police:=new Police() _security:=new Security() _thief:=new Thief() _transporter.AddWatcher(_police) _transporter.AddWatcher(_security) _transporter.AddWatcher(_thief) ;~ _transporter.removeWatcher(_security) _transporter.notifyWatchers() } } t:=new Test() t.main()
其它相关:
讲故事,学(AHK)设计模式—观察者模式_liuyukuan的博客-CSDN博客
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。
评论(0)