观察者模式(Observer)
观察者模式(发布-订阅模式):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发送变化时,会通知所有观察者对象,让它们能够自动更新自己
————————————————
案例:
珠宝商运送一批钻石,有黄金强盗准备抢劫,珠宝商雇佣了私人保镖,警察局也派人护送,于是当运输车上路的时候,强盗保镖警察都要观察运输车一举一动。
————————————————
程序:
1. 抽象的被观察者watched接口,有addWatcher,deleteWatch,notifyWatch方法
2. 抽象的观察者watcher接口,update方法
3. 具体的被观察者Transporter实现watched接口
4. 三个具体的观察者实现watcher,有具体的update方法
5. 测试类
————————————————
AHK代码:
;抽象观察者
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()
其它相关: