Chromium base 库中的 Observer 模式实现:ObserverList 与 ObserverListThreadSafe 深度解析

在大型软件系统中,观察者模式(Observer Pattern)是一种非常常用的设计模式,用于对象之间的一对多依赖关系。Chromium 的 base 库提供了 ObserverListObserverListThreadSafe 两种实现,它们在浏览器内核的事件订阅、异步消息处理、模块解耦中被广泛使用。本文将从概念、源码、用法、对比及常见坑等角度,全面解析 Chromium 中 Observer 模式的实现。


一、Observer 模式概念回顾

Observer 模式,又称发布-订阅模式,核心思想是:

  • Subject(被观察者):维护一个观察者列表,当自身状态改变时,通知所有观察者。

  • Observer(观察者):定义一个接口,当被观察者状态发生变化时接收通知。

UML 简单示意

+-----------+ +------------+ | Subject |<>-------->| Observer | +-----------+ +------------+ | observers | | update() | | attach() | +------------+ | detach() | | notify() | +-----------+

在 Chromium 中,ObserverList 完全实现了这种一对多通知机制,并提供了线程安全版本 ObserverListThreadSafe


二、ObserverList 概述

ObserverList 是 Chromium base 提供的非线程安全版本的观察者列表,适用于单线程场景

1. 头文件及基本类型

#include "base/observer_list.h"

常用类型:

base::ObserverList<MyObserver> observers;

  • MyObserver 必须是抽象类或接口类。

  • 支持三种通知策略:

    • ObserverListPolicy::EXISTING_ONLY:只通知已经存在的观察者。

    • ObserverListPolicy::NOTIFY_EXISTING_ONLY:仅通知当前存在的观察者。

    • ObserverListPolicy::CHECK_EMPTY:调试模式检查列表为空。


2. ObserverList API

class ObserverList<ObserverType, CheckedType = DEFAULT, AllowEmpty = false> { public: void AddObserver(ObserverType* observer); void RemoveObserver(ObserverType* observer); template <typename Func

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ปรัชญา แค้วคำมูล

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

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

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

打赏作者

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

抵扣说明:

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

余额充值