[AHK]用AutoHotkey面向对象实践“观察者模式”

该博客介绍了观察者模式的概念及其在珠宝运输安全场景中的应用。通过AHK(AutoHotkey)代码展示了如何创建抽象的被观察者和观察者接口,以及具体的实现,包括珠宝运输车、警察、强盗和保镖的角色。在代码中,当运输车行动时,所有观察者都会收到通知并执行相应的行动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

观察者模式(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()

其它相关:

讲故事,学(AHK)设计模式—观察者模式_liuyukuan的博客-优快云博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liuyukuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值