灌水 [腾讯 TMQ][浅谈 Chromium 中的设计模式 (终)]——Observer 模式

匿名 · 2018年04月11日 · 300 次阅读

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)明确功能,避免曲解:一个类、一个模块、一个层次的功能职责都必须是要明确的。

全文终!

版权所属,禁止转载

扫描下方二维码,关注微信公众号:腾讯移动品质中心 TMQ,获取更多测试干货!

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册