文章目录
对象行为型模式
观察者模式(Observer Pattern)
-
像生产者消费者模型。
-
通常使用在监听状态的情况下,通过AddObserver ,使得对方状态变化后,通知各个Observer 。
-
例如:
NetExportFileWriter
类中,包含了内部类StateObserver
,通过自身状态变化通知继承自StateObserver
的Observer
,具体调用到OnNewState
。
类创建型模式
工厂模式(Factory Pattern)
https://www.cnblogs.com/yssjun/p/11102162.html
-
简单工厂模式 (属于类创建型模式)
- 通过给工厂类传入参数,工厂类负责根据不同参数创建实例。
- 优点:实现对象的创建和使用分离 。(创建交给工行负责)
- 缺点:不够灵活,新增类时需要修改工厂类。(违反开闭原则:开放扩展、封闭修改)
-
工厂模式
- 定义一个用于创建对象的接口,让子类决定实例化哪个类,
- 通过将产品类的实例化操作延迟到工厂子类中完成。新增产品类时需要新增个工厂继承自工厂类。(保证了开闭原则)
- 保证了开闭原则,但是造成过多的工厂类。
-
抽象工厂模式
- 综合了简单工厂模式、工厂模式。(同样违反开闭原则)
- 使得抽象工厂
-
例如两个工厂子类:XiaoMiFactory、AppleFactory都继承自AbstractFactory 抽象工厂类,分别能实现makePhone、makePC
void main() {
AbstractFactory* miFactory = new XiaoMiFactory();
AbstractFactory* appleFactory = new AppleFactory();
miFactory->makePhone(); // make xiaomi phone!
miFactory->makePC(); // make xiaomi PC!
appleFactory->makePhone(); // make iphone!
appleFactory->makePC(); // make MAC!
}
Delegate 和 client
- 两者有点像。
- Delegate 是委托的意思,XXXDelegate 类必定对应一个 XXX 类,通常 XXX 通知 XXXDelegate 行为的发生,有时也询问特定行为的处理策略,可以理解为 XXXDelegate 是 XXX 行为的监听者(返回值为空)和决策者(返回值非空),与 Listener 和 Observer 的区别是 XXX 可以有 N 个Listener 或 Observer,但通常只能有一个 Delegate。
委托模式(Delegate Pattern)
-
委托模式,某些类自己不执行一些任务,并把这些任务委托给另外一个类去执行,那么真正执行任务的类就被称为委托类。(可以保证不同web app 实现自己的定制需求)
-
chromium 每个模块具体功能的实现基本上都是通过Delegate类来实现的。
- 如果开发者继承该Delegate类,并加以实现就能很方便的完成定制
- 倘若开发者不需要某个模块的功能,也就不用实现相关的Delegate类,那么该模块就不会发挥效用。
-
如: content\public\browser\download_manager.h 中的
DownloadManager
实际工作 交给了 content\public\browser\download_manager_delegate.h中的DownloadManagerDelegate
来实现。- Chrome, Content Shell, CEF3和Crosswalk都有自己的实现(chrome 的实现为
ChromeDownloadManagerDelegate
,weblayer 的实现为DownloadManagerDelegateImpl
) - 开发者需要自己设计一个新的Delegate类来继承DownloadManagerDelegate,并覆盖相应的方法即可完成下载功能,另外需要通过SetDelegate方法,在程序开始时把自定义类的对象注册到DownloadManager中。
- Chrome, Content Shell, CEF3和Crosswalk都有自己的实现(chrome 的实现为
-
即A_delegate 定义了委托模式的接口,具体A_delegate 的实现类A_delegate_impl 实现具体功能。
-
同时存在 A_delegate_impl1、A_delegate_impl2、A_delegate_impl3。以实现不同的逻辑,那么使用A的时候通过set不同的delegate,以实现不同的逻辑,就像chromium支持的chrome、weblayershell、contentshell 等。
client 模式
- Client 就是提供 Embedder API,让嵌入这实现 implement 注入自己的逻辑,以参与browser之类的逻辑。
- "client "通常意味着一个接口,其实现由更高层次的嵌入者注入。例如,ContentClient是一个接口,由//content的嵌入者实现和注入的。
- (如对于ContentBrowserClient,weblayer 通过
ContentBrowserClientImpl
、chrome 通过ChromeContentBrowserClient
注入了自己的 browser 逻辑 )
- (如对于ContentBrowserClient,weblayer 通过