设计模式——准备:Solid设计原则、UML类图、设计模式分类

设计模式——准备: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. 设计模式分类

  • 创建型
    • 单例
    • 工厂方法
    • 抽象工厂
    • 建造者
    • 原型
  • 结构型
    • 适配器
    • 桥接
    • 装饰器
    • 组合
    • 外观
    • 享元
    • 代理
  • 行为型
    • 模版方法
    • 命令
    • 迭代器
    • 观察者
    • 中介者
    • 备忘录
    • 解释器
    • 状态
    • 策略
    • 职责链
    • 访问者