QT设计模式:观察者模式

基本概念

观察者模式(Observer Pattern)是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象状态发生变化时,会通知所有的观察者对象,使它们能够自动更新自己的状态。

适用场景

观察者模式适用于任何需要实现对象之间松耦合、动态关联时,特别是当一个对象的状态变化需要通知多个其他对象做出响应的场景。如事件驱动系统,GUI系统和MVC模式。

模式的特点

  • 一对多的依赖关系:观察者模式定义了一种一对多的依赖关系,即一个主对象可以有多个观察者对象订阅它的状态变化。

  • 松散耦合:主对象并不需要知道观察者对象的具体实现细节,只需要一个观察者对象列表,并在状态变化时通知它们即可,使系统更容易扩展和维护。

  • 动态关联:观察者对象可以动态地注册和移除自己,以决定是否接收主题对象的通知。这使得观察者模式具有一定的灵活性和可扩展性。

实现:信号与槽

QT中的信号与槽机制就是观察者模式的一种实现,

connect(主对象, 信号, 观察者对象, 槽)

其有观察者模式的以下特征:

  • 主对象:发出信号的对象。
  • 观察者对象:提供槽函数的对象。
  • 动态关联:connect函数为主对象添加了一个观察者;反之,disconnect函数删除了一个观察者。
  • 一对多的依赖关系:一个信号可以连接多个槽,当信号产生时,所有观察者的槽函数都会被调用,观察者可以更新自己的状态。
  • 松散耦合:发出信号的对象不需要知道槽函数的实现,甚至参数都可以不匹配。

实现:事件过滤器

QT中的事件过滤器也是观察者模式的一种实现,

观察者->installEventFilter(主对象)

其有观察者模式的以下特征:

  • 主对象:被监视的对象,通常重写 eventFilter()
  • 观察者对象:安装了事件过滤器(installEventFilter())的对象。
  • 动态关联:通过调用 installEventFilter() 函数为主对象添加一个观察者对象,调用removeEventFilter() 可以删除一个观察者对象。
  • 一对多的依赖关系:一个事件过滤器可以同时监视多个主对象的事件,因此实现了一对多的依赖关系。
  • 松散耦合:被监视的对象不需要知道事件过滤器的存在,事件过滤器也不需要了解被监视对象的具体实现细节。

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值