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