前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【浅谈Chromium中的设计模式(终)】——Observer模式

【浅谈Chromium中的设计模式(终)】——Observer模式

作者头像
腾讯移动品质中心TMQ
发布2018-04-23 14:54:31
1.4K0
发布2018-04-23 14:54:31
举报

Observer模式介绍

观察者模式是软件设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实时事件处理系统。

下面是一个简单的UML类图:

Observer在chromium中的使用

Observer模式在Chromium中得到了广泛的应用,上至chrome browser层的tab strip管理,升级探测器,下至content层的下载管理,都随处可见observer模式的应用。

因为C++没有在语言层面支持Observer模式,所以Subject需要自己实现AddObserver(),RemoveObserver()。定义好通知的类,加上ObserverList<>对象。(chromium的base里面定义了ObserverList)一个观察者就完成了。需要通知的时候使用FOR_EACH_OBSERVER(ObserverType,observer_list,func)进行Publish。当然也可以单独实现publish的方法。

Observer的设计也使得自动化测试比较容易实现,如果我们需要在测试中订阅某个操作,我们可以基于基类扩展实现test的observer,这样就可以获取某个事件的通知了。

Observer在Chromium中的例子

还是以DownloadManager类来举例,用户下载就会调用CreatDownloadItem,这时候就会通知所有的observer(调用observer的OnDownloadCreated函数)。

来看看测试代码怎么写吧:

基于Download Manager:Observer实现一个Download Item Created Observer。

在Create Download Item执行的时候,对应的observer的OnDownloadCreated就会执行。

【浅谈Chromium中的设计模式系列】 的总结

总结Chromium的设计要点:

(1)高内聚,低耦合。

(2)模块分层,面向接口, 简化依赖: Content API就是最好的例子。为了封装内部的变化,将上层开发者的负担降低,增加接口层进行隔离。这也是中间层的一种应用。

(3)单一职责:不要让一个类做太多事(SRP)。

(4)明确功能,避免曲解:一个类、一个模块、一个层次的功能职责都必须是要明确的。

全文终!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯移动品质中心TMQ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Observer在chromium中的使用
  • Observer在Chromium中的例子
  • 【浅谈Chromium中的设计模式系列】 的总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档