基本认知
什么是模式
在一定环境中解决一些问题的方案(通俗来说:特定环境中用固定的套路解决问题)
什么是设计模式
设计模式是一套反复被人使用,多数人知晓的,经过分类编目的代码设计经验的总结
设计模式最终的目的是为了应对变化,提高代码的复用性
-
客户需求的变化
-
技术平台的变化
-
开发团队的变化
-
市场需求的变化
…
设计模式分类
创建型模式
通常和对象创建有关,涉及到对象实例化的方式(5种)
- 工厂模式
- 抽象工厂模式
- 建造者模式
- 原型模式
- 单例模式
结构型模式
描述的是如何组合类和对象获得更大的结构(7种)
- 代理模式
- 装饰者模式
- 适配器模式
- 桥接模式
- 组合模式
- 外观模式
- 享元模式
行为型模式
描述类和对象的交互以及分配职责(11种)
- 模板方法模式
- 命令模式
- 责任链模式
- 策略模式
- 中介者模式
- 观察者模式
- 备忘录模式
- 访问者模式
- 状态模式
- 解释器模式
- 迭代器模式
面向对象的设计原则
依赖倒置原则 (DIP)
DIP:Dependence Inversion Principle
- 高层(稳定)不依赖底层(变化),两者依赖抽象(稳定)
- 抽象(稳定)不依赖细节(变化),细节依赖抽象(稳定)
开放封闭原则 (OCP)
OCP:Open For Extension, Closed For Modification Principle
- 对扩展开放,对更改封闭
- 类模块可扩展,但不可修改
单一职责原则 (SRP)
SRP:Single Responsibility Principle
- 一个类应该仅有一个引起它变化的原因
- 变化的方向隐含类的责任
里氏替换原则 (LSP)
LSP:Liskov Subsitution Principle
- 子类必须能够替换它们的基类(尽量少多态)
- 继承表达类型抽象
接口隔离原则 (ISP)
ISP:Interface Segregation Principle
- 不应该强迫客户程序依赖他们不用的方法(如果某个功能或方法不是必需的,那么依赖于它只会增加不必要的复杂性和耦合度;同时,只需要暴露必要的接口和方法,隐藏不必要的内部细节)
- 接口应该小而完备(一个设计良好的接口应该只包含客户程序所需的方法)
- 一个接口应该只提供一种对外功能
优先组合不是继承原则 (CARP)
CARP:Composite/Aggregate Reuse Principle
- 类的继承通常是"白箱复用",对象组合通常是"黑箱复用"
- 继承在一定程度上破坏封装性,子类和父类耦合度高(尽量少继承)
迪米特法则 (LOD)
LOD:Law of Demeter
- 对象应当对其他对象尽可能少的了解(宁可通过 A ⇔ B ⇔ C,也不要直接 A ⇔ C)
- 各个模块之间相互调用时,通常会提供一个统一的接口来实现
类图
基本认识
- 类图显示了模型的静态结构,特别是模型中存在的类、类内部结构以及它们与其他类的关系
- 类图不显示暂时性的信息
- 类图是面向对象建模的主要组成部分
- 它既用于应用程序的系统分类的一般概念建模,也用于详细建模,将模型转换为编程代码
类图作用
描述类本身结构以及类与类之间一些关系
类图的元素
在类图中一共包含了以下几种模型元素,分别是:类(Class)、接口(Interface)、依赖关系(Dependecy)、泛化关系(Generalization)、关联关系(Association)、聚合关系(Aggregation)、组合关系(Composition)和实现关系(Realization)
类图中元素的组成
C++ 中一个类的类图组成如下:
+: 公有属性
-: 私有属性
#: 保护属性
name: string 成员名: 类型
eat(): void 成员函数: 返回值类型
斜体: 抽象类或者纯虚函数
类中类图的关系
- 依赖关系(Dependency)
依赖关系是指:两个或多个类之间依存关系,如植物类依赖于土壤类。
依赖关系还可以再细分为5种类型,分别是
- 绑定依赖(Binding)
- 实现依赖(Realization)
- 使用依赖(Usage)
- 抽象依赖(Abstraction)
- 授权依赖(Permission)
依赖关系用虚线箭头来表示,箭头指向为依赖的方向
- 泛化关系(Generalization)
简单的讲就是类之间的继承关系
用空心三角形和实线来表示,箭头指向为父类
- 关联关系(Association)
关联关系是类之间一种相互影响的关系,影响的方向就是关联的方向
用实线箭头表示
- 聚合关系(Aggregation)
聚合关系是类之间的一种较弱的耦合关系,如一个字符串数组和一个字符串就是一种聚合关系
用空心的菱形和实线箭头来表示,箭头方向为被聚合的类
- 组合关系(Composition)
组合关系是类之间一种整体与部分之间的关系,如一只青蛙有四条腿,青蛙类与青蛙腿类之间的关系就是组合关系
实心的菱形和实线箭头来表示,箭头指向为被组合的类
- 实现关系(Realization)
一般来讲,实现关系是针对类与接口之间的关系而言的
空心三角形和虚线表示