《C++设计模式》视频_李建忠
《C++设计模式》视频_李建忠
目录
23种设计模式总结
分类总结
几种分类方式
- 从目的来看(《设计模式:可复用面向对象》中的分类) - 分类 - 中译 - 设计模式 - 创建型模式 
 (Creational)
 5- 抽象工厂 
 构建器(生成器)
 工厂方法
 原型
 单件- Abstract Factory 
 Builder
 Factory Method
 Prototype
 Singleton- 结构型模式 
 (Structural)
 7- 适配器 
 桥接模式
 组成
 装饰
 外观(门面)
 享元
 代理- Adapter 
 Bridge
 Composite
 Decorator
 Facade
 Flyweight
 Proxy- 行为型模式 
 (Behavioral)
 11- 职责链 
 命令
 解释器(解析器)
 迭代器
 中介者
 备忘录
 观察者
 状态
 策略
 模板方法
 访问者- Chain of Responsibility 
 Command
 Interpreter
 Iterator
 Mediator
 Memento
 Observer
 State
 Strategy
 Template Method
 Visitor
 
- 从范围来看 - 类模式:处理类与子类的静态关系(偏重继承方案)
- 对象模式:处理对象间的动态关系(偏重组合方案)
 
- 从封装变化角度对模式分类(《设计模式_李建忠视频》中的分类)(其中划掉部分表示比较少用或过时) - 分类 - 中译 - 设计模式 - 目的分类 - 组件协作 - 模板方法 
 策略模式
 观察者模式- Template Method 
 Strategy
 Observer/Event- 行为型 - 单一职责 - 装饰模式 
 桥接模式- Decorator 
 Bridge- 结构型 - 对象创建 - 工厂模式 
 抽象工厂
 原型模式- 构建器模式- Factory Method 
 Abstract Factory
 Prototype
 Builder- 创建型 - 对象性能 - 单件模式 
 享元模式- Singleton 
 Flyweight- 创建型 
 结构型- 接口隔离 - 门面模式 
 代理模式
 适配器- 中介者模式- Facade 
 Proxy
 Adapter
 Mediator- 结构型 
 行为型- 状态变化 - 状态模式 - 备忘录模式- State 
 Memento- 行为型 - 数据结构 - 组合模式 - 迭代器模式- 职责链模式- Composite 
 Iterator
 Chain of Responsibility- 结构型 
 行为型- 行为变化 - 命令模式- 访问器模式- Command 
 Visitor- 行为型 - 领域问题 - 解析器模式- Interpreter - 行为型 
 
分类总结
略
个人分类
前面提到过可以用不同的方式对这23种设计模式进行划分和分类
包括:
- 按目的来看(书上的3种)
- 按封装变化角度(李建忠的9种)
- 按范围来看(2种)
- 按启用的原则来看(8种,但一个设计模式会涉及多种原则)
- 按重构技法来看(5种,但一个设计模式会涉及多种原则)
- 按中间层来看(见下)
另外,从 Java 中也有一具话叫 “没有什么是加中间层不能解决的,如果有,就再加一层”。我认为我可以以 “中间层” 为切入点,再进行分类。
 缺点是这种分类偏代码向,不够本质,归纳流于表面
有两种中间层提供方法
- a和b之间直接提供。例如 - 工厂模式:a create b 的中间添加中间层
- 适配器模式
 
- 通过基类提供。a -> a基 -> b基 -> b,使用这种方法进行传递。
 有点类似封装变化点的原则、和晚绑定的技法
总概共同特点
- 一个目标:管理变化,提高复用! 
- 两种手段 - 分解
- 抽象
 
- 八大原则 - 依赖倒置原则(DIP)
- 开放封闭原则(OCP)(开闭原则)
- 单一职责原则(SRP)
- 里氏代换原则(LSP)(Liskov代换原则 / 里斯科夫代换)
- 接口隔离原则(ISP)
- 合成复用原则(优先使用对象组合,而不是类继承)
- 封装变化点
- 面向接口编程,而不是面向实现编程
 
- 五种重构技法 - 静态 --> 动态
- 早绑定 --> 晚绑定
- 继承 --> 组合
- 编译时依赖 --> 运行时依赖
- 紧耦合 --> 松耦合
 
- 类图的共同特点与趋向 - 继承 --> 组合且是包含一个抽象基类的指针
- class A:B{}(×)
- class A{B b}(×)
- class A{B* pb}(√)
 
- 什么时候不用模式(不要盲目模式、为了模式而模式) - 代码可读性很差时
- 需求理解还很浅时
- 变化没有显现时
- 不是系统的关键依赖点
- 项目没有复用价值时(比如对于做外包的)
- 项目将要发布时
 
- 设计模式成长之路 - "手中无剑,心中无剑”:见模式而不知
- "手中有剑,心中无剑":可以识别模式,作为应用开发人员使用模式
- "手中有剑,心中有剑":作为框架开发人员为应用设计某些模式
- "手中无剑,心中有剑":忘掉模式,只有原则
 
每种设计模式的要点
略
常见框架中的设计模式
模板模式 Template Method
- 这个太常见了,我就不举例了
观察者模式 Observer
- Java中的Listener机制
- C#的Event模式
- Qt的single-slot机制、Model-View模式
- Vue的核心——数据驱动视图(Observer模块)
中介者模式 Mediator
- 类似于MVVM(Model-View-ViewModel,模型-视图-视图模型)本质上就是MVC (Model-View-Controller,模型-视图-控制器 )的改进版 
- 类似于Vue(Vue中, - v-bind/- :应该用的是观察者模式,而- v-model双向绑定应该是用的中介者模式)
单例模式 Singleton
- Qt的QPluginLoader的instance()方法
- Qt开发过程中的自定义类PluginManager也用到了这个模式
职责链模式 Chain of Responsibility
- Android的事件分发机制
- QT的消息传递机制
适配器模式 Adapter
- 原生Android开发的控件有用到过
链接到当前文件 0
没有文件链接到当前文件