C++设计模式-李建忠
2024-12-03 01:56:25 0 举报
AI智能生成
学习C++设计模式时的知识点,通过听b站李建忠老师的课《C++设计模式》整理的笔记。 设计模式的目标:1.代码复用 2.控制变化
作者其他创作
大纲/内容
二、“组件协作”模式
2.1 模板方式(Template Method)
2.1.1 动机
2.1.2 早绑定与晚绑定
一般的程序结构,都是晚期程序去调用早期程序
Template Method 提倡晚绑定,即早期程序调用晚期程序,动态部分由晚期程序(子类)实现。这需要通过虚函数实现。
2.1.3 结构
2.1.4 要点
Template Method模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性)为很多应用程序框架提供了灵活的扩展点(虚函数,子类继承可以override),是代码复用方面的基本实现结构。
除了可以灵活应对子步骤的变化外,“不要调用我,让我来调用你”的反向控制结构是Template Method的典型应用。
在具体实现方面,被Template Method调用的虚方法可以具有实现,也可以没有任何实现(抽象方法、纯虚方法),但一般推荐将它们设置为protected方法。
除了可以灵活应对子步骤的变化外,“不要调用我,让我来调用你”的反向控制结构是Template Method的典型应用。
在具体实现方面,被Template Method调用的虚方法可以具有实现,也可以没有任何实现(抽象方法、纯虚方法),但一般推荐将它们设置为protected方法。
2.2 策略模式(Strategy)
2.2.1 动机
问题例子
解决方法
2.2.2 模式定义
2.2.3 结构
上部分红色为稳定部分,相当于税法基类和SalesOrder
下部分蓝色为扩展部分,相当于示例中的税法
下部分蓝色为扩展部分,相当于示例中的税法
2.2.4 要点
2.3 观察者模式(Observer)
2.3.1 动机
问题例子
解决例子
2.3.2 模式定义
2.3.3 结构
2.3.4 要点
三、 “单一职责”模式
3.1 装饰模式(Decorator)
3.1.1 动机
问题例子
示例中类的关系,扩展功能的增多带来的子类膨胀
修改为装饰模式
左边是主体操作,右边是扩展操作,主体和扩展应该分开继承
3.1.2 模式定义
3.1.3 结构
红色稳定,蓝色动态
3.1.4 要点
3.2 桥模式(Bridge)
3.2.1 动机
问题提出
解决方法
3.2.2 模式定义
将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。
3.2.3 结构
红色静态,蓝色动态
3.2.4 要点
四、 “对象创建”模式
4.1 工厂方法(Factory Method)
4.1.1 动机
问题提出
解决方法
4.1.2 模式定义
4.1.3 结构
4.1.4 要点
一些术语
use-a关系
如果类A与类B是 use-a 关系,则A具有类型为B、B&、const B&、B*、const B*的一个成员,
或者是可以轻易以上述对象之一返回一个B的函数。于是A可以使用B的程序和数据。
或者是可以轻易以上述对象之一返回一个B的函数。于是A可以使用B的程序和数据。
has-a关系
has-a 类似于 use-a,不同之处在于,A负责构建和销毁B并在它的生存期使用它。
is-a关系
如果类A和类B是 is-a 关系,则B必须是A的抽象,B应当只重载基类。is-a的关系通常出现在公共派生的C++中 。
is-like-a(其实就是一种use-a)
派生自基类并增加了一些新的接口
is-implemented-as-a关系(实现关系)
如果类A与接口M是实现关系,则它实现了M所有的纯虚函数。接口实现是Symbian OS中唯一使用多重继承的地方。
一、 面向对象设计原则
1.1 依赖倒置原则(DIP)
1.2 开放封闭原则(OCP)
1.3 单一职责原则(SRP)
1.4 Liskov 替换原则(LSP)
1.5 接口隔离原则(ISP)
1.6 优先使用对象组合,而不是类继承
1.7 封装变化点
1.8 针对接口编程,而不是针对实现编程
收藏
收藏
0 条评论
下一页