Boolan 设计模式_1

主要内容:

本讲主要讲解面向对象设计的八大原则,和其中五个设计模式。

1. 综述

目标:可复用(编译单位级别的复用,不是源代码的拷贝粘贴)
方法:面向对象
解决复杂问题方法:分解和抽象。
面向对象:适应变化、各负其责。

2. 面向对象设计八大原则

还是画图理解起来更容易些。。。


面向对象设计八大原则

【接口标准化】分析问题,有时候应该跳出软件,结合人类发展历史。。。秦始皇统一六国。
雕版印刷(紧耦合) --> 活字印刷(松耦合)

3. GOF-23模式
3.1 template method
  • 应用程序开发人员使用lib时,由于lib的开发人员已经写好程序的主流程和部分步骤的具体实现(这些是相对稳定的), 应用开发人员只需对lib的类进行继承,并重写部分(override)它的成员函数(推荐为protdected类型,不被外界直接调用)即可。(晚绑定)。
  • 前提是有稳定和不稳定的成分,设计模式才有用武之地。如果全部都稳定,或是全部都不稳定,那么就不能使用设计模式。
  • 设计模式看类图时,要找到其中稳定和变化的部分。
  • library说:“你(应用程序)不要调用我(library),让我调用你!”
  • 虚函数和函数指针都是晚绑定。
3.2 strategy
  • 【要动态的看问题,而不只是静态的看待问题。加上时间轴,考虑到未来的变化】
  • 使用多态的变量(类内和类外),要用指针。
  • 为解决同一个问题的不同算法设计一个类,并实现各种的计算方法,当有新的算法时,则扩展算法(定义新的类来实现)。不同算法之间可以相互替换(变化)。
  • 如果if...else if...是绝对稳定的,那么大部分可以采用strategy method。
  • 优点:当存在一些无用的算法时, 代码具有良好的本地性,加载的代码,就是调用相应的哪个实现方法,但利用if..else if...他们也会加载这些无用的算法到代码段,影响性能。
3.3 observer/event观察者模式
  • 编译时依赖。违背依赖倒置原则。
  • c++支持多继承,最好一个是主基类,其他的都是接口类。
  • 对象间一对多的依赖关系,一个对象的状态变化时,所有依赖于它的对象得到通知,并各自自动更新。
  • 目标和观察者独立更改,松耦合。
  • 目标自动发送通知,无需指定观察者。
  • 观察者自己决定是否订阅通知,不订阅通知就不用将这个观察者放入到目标虽维护的对象集合。目标无需知道观察者是否订阅了通知。
  • 单一职责原则表现突出的模式
3.4 decorator
  • 组合-->继承;编译时-->运行时的多态;使用时,编译时装饰-->运行时装饰。
  • CryptoStream继承于Stream,并拥有一个Stream的指针(使用这种方法99%都是decorator模式)。继承是为了继承接口,完善接口规范,指针是为了实现运行时多态,实现具体的类。
  • 当多个类继承于同一个类时,多个类的相同的成员应该提到基类中,如果其中有些子类并不使用某些基类数据成员,这时就可以将这些数据成员放入一个中间类(DecoratorStream)中.
  • 主体操作和扩展操作应该分开继承。



3.5 bridge
  • 类的数目1+n+n*m-->1+n+m
  • 当多个类继承同一个类,基类中有一些不被子类重写的成员函数时,可将基类拆分成两个类。(Messager和MessageImp)
    抽象部分(平台实现)和实现部分(业务实现),多个变化维度分离,使他们可以独立变化。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值