设计模式——准备:Solid设计原则、UML类图、设计模式分类
1. 导读
设计模式是程序员进阶、面试无法躲避的内容,也是阅读源代码、提升代码质量最重要的内功。
今天下决心好好学一遍设计模式,先做一些准备工作。
- 记住Solid设计原则,设计原则略抽象,记住名字和含义,在后面学习中细品
- 学会看UML类图,大部分设计模式的文章都会用UML类图展示设计模式,学会看UML类图有助于看懂别人的文章
- 记住设计模式分类,以及每个类别下有哪些设计模式,厚的先读薄,脑海有目录和节奏
2. Solid设计原则
1 .单一职责原则(Single Responsibility Principal)
一个类只包含单一职责,有且仅有一个原因使类发生变化。
2.开放封闭原则(Open-Closed Principal)
对扩展开放,对修改封闭。即可扩展,不可修改。需求变更后通过添加类而不是修改类实现。
3.里氏替换原则(Liskov Substitution Principal)
所有使用父类的地方,都可以使用子类替换。
4.接口隔离原则(Interface Segregation Principal)
实现类不应该包含不需要但必须实现的方法。也就是接口功能要足够聚合。
5.依赖倒置原则(Dependency Inversion Principal)
抽象不应该依赖细节,细节要依赖抽象,也就是要面向接口编程而不针对实现编程。
看到这里的各位萌亲,就问你蒙不蒙圈(不蒙圈的应该是大神,左手出门不送),我反正蒙圈了,但大神还是建议我先记住Solid原则,学完23种设计再回来理解。他说“跟产品大大相爱相杀几年后再回来理解设计原则,一定会明白大神们总结的原则有多重要”。
3. UML类图
3.1 类
由类名、属性、操作组成
3.1.1 类名
类的名字,如图中的Employee
3.1.2 属性
类的成员变量,格式
可见性 名称:类型[=默认值]
可见性符号
- public: +
- private: -
- protected: #
- package: ~
3.1.3 操作
类的方法,格式
可见性 名称(参数列表)[:返回类型]
可见性同属性
3.2 接口
接口由名字、操作组成,名字上部有<
3.3 关系
- 关联:成员变量
- 双向关联:直线
- 单向关联:直线+箭头
- 自关联:直线+箭头
- 继承:继承抽象类,空心三角形+直线表示
- 泛华:继承非抽象类,空心三角形+直线表示
- 实现:实现接口,空心三角形+虚线表示
- 聚合:成员变量,不是强依赖(部门与员工),空心菱形箭头+直线表示
- 组合:成员变量,强依赖(公司与部门),实心菱形箭头+直线表示
- 依赖:构造函数、方法入参。
4. 时序图
时序图(Sequence Diagram)按照时间顺序显示对象之间交互,包括角色(Actor)、对象(Object)、生命线(Lifeline)、控制焦点(Focus of control)、消息(Message)
角色(Actor)
对象:对象名+类名
生命线:对象向下延伸的虚线
控制焦点:生命线上的矩形,执行操作
消息:
同步消息,实线+实心箭头
异步消息,实线+箭头
返回消息,虚线+箭头
自关联消息,对象内部方法调用
Combined Fragments
Alternative fragment(denoted “alt”) 与 if…then…else对应
Option fragment (denoted “opt”) 与 Switch对应
Parallel fragment (denoted “par”) 表示同时发生
Loop fragment(denoted “loop”) 与 for 或者 Foreach对应
5. 设计模式分类
- 创建型
- 单例
- 工厂方法
- 抽象工厂
- 建造者
- 原型
- 结构型
- 适配器
- 桥接
- 装饰器
- 组合
- 外观
- 享元
- 代理
- 行为型
- 模版方法
- 命令
- 迭代器
- 观察者
- 中介者
- 备忘录
- 解释器
- 状态
- 策略
- 职责链
- 访问者