GeekBand C++设计模式 First Week

设计模式

设计模式是描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样我们就可以对于同样的问题使用同样的解决办法。

为什么要有设计模式呢?因为软件设计本身复杂性大,复杂的根本原因在于变化,包括需求的变化,平台的变化,环境的变化等。

如何解决复杂性呢? 常用的解决办法有分解和抽象。分解是分而治之,将大问题分解为多个小问题,将复杂问题分解为多个简单的问题。抽象是更高层次的一种通用技术。由于不能掌握全部的复杂对象,我们选择忽视它的非本质细节,而去处理泛化和理想化了的对象模型。

面向对象设计原则

变化是复用的天敌,面向对象设计的最大优势在于:抵御变化。

理解面向对象可以包含三个层面的意思:1)理解隔离变化 2)类各司其职 3)对象的含义(从语言实现层面来看,对象封装了数据和代码;从规格层面讲,对象是一系列可被使用的公共接口;从概念层面讲,对象是某种拥有责任的抽象)

面向对象设计的 8 大原则:

  1. 依赖倒置原则
  2. 开发封闭原则
  3. 单一职责原则
  4. Liskov替换原则
  5. 接口隔离原则
  6. 优先使用对象组合,而不是继承
  7. 封装变化点
  8. 针对接口编程,而不是针对实现编程

设计模式的分类

从目的来看,可分为创建型,结构型,行为型。从范围来看,可分为类模式处理类与子类的静态关系;对象模式处理对象间的动态关系。

从封装变化角度对模式分类:

组件协作: Template Method, Strategy, Observer/ Event

单一职责: Decotator, Bridge

对象创建: Factory Method, Abstruct Factory, Prototype, Builder

对象性能: Sigleton, Flyweight

接口隔离: Facede, Proxy, Mediator, Adapter

状态变化: Memento, State

数据结构: Composite, Iterator, Chain of Resposibility

行为变化: Command, Visitor

领域问题: Interpreter

重构关键技法:

  1. 静态 -> 动态
  2. 早绑定 -> 晚绑定
  3. 继承 -> 组合
  4. 编译时依赖 -> 运行时依赖
  5. 紧耦合 -> 松耦合

策略模式

观察者模式

装饰模式

桥模式

你可能感兴趣的:(GeekBand C++设计模式 First Week)