申请书范文网,分享全网优秀范文,学习好帮手!
申请书范文网 > 【chromium】常用设计模式:委托模式(Delegate Pattern) 观察者模式 工厂模式。

【chromium】常用设计模式:委托模式(Delegate Pattern) 观察者模式 工厂模式。

时间:2021-04-20 13:16:47

相关推荐

【chromium】常用设计模式:委托模式(Delegate Pattern) 观察者模式  工厂模式。

文章目录

对象行为型模式观察者模式(Observer Pattern)类创建型模式工厂模式(Factory Pattern)Delegate 和 client委托模式(Delegate Pattern)client 模式

对象行为型模式

观察者模式(Observer Pattern)

像生产者消费者模型。

通常使用在监听状态的情况下,通过AddObserver ,使得对方状态变化后,通知各个Observer 。

例如:

NetExportFileWriter类中,包含了内部类StateObserver,通过自身状态变化通知继承自StateObserverObserver,具体调用到OnNewState

类创建型模式

工厂模式(Factory Pattern)

/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中。

即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 逻辑)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。