参考书目:

《设计模式》第二版:清华大学出版社:刘伟 编著


一. UML

1. 类图

  • 类名:类的名字, 是一个字符串。
  • 属性:指类的性质,即类的成员变量。形式:可见性 名称:类型 = 默认值public:+, private:-, protected:#
  • 类的操作:及函数。形式:可见性 名称(参数列表):返回值类型
  • 类之间的关系

①关联关系(Association)

  • 是一种结构化关系, 表示一类对象和另一类对象之间有联系,通常将一个类的对象作为另一个类的属性。

  • 双向关联:互为对方属性 屏幕截图 2023-06-19 202302.png

  • 单向关联:别的类是当前类的属性 uTools_1687177598868.png

  • 自关联:自己是自己的属性。 uTools_1687177977235.png

  • 多重性关联:表示一个类的对象与另一个类的链接个数。

  • 聚合关系(Aggregation):表示一个整体与部分的关系, 成员对象可以脱离整体单独存在。 uTools_1687178654819.png

  • 组合关系:也表示整体和部分关系, 但组合关系中的整体部分具有统一的生存期。 uTools_1687178930278.png

②依赖关系(Dependency)

  • 是一种使用关系,特定事物的改变可能会影响到使用该事物的其他事物,通常体现在某个类的方法使用另一个类的对象作为参数。 uTools_1687179183735.png

③泛化关系(Generalization)

  • 也就是继承关系。 uTools_1687179596819.png

④接口与实现关系(Realization)

  • 类实现接口 uTools_1687179859398.png

二. 面向对象设计原则

  • 高内聚(同一功能的函数内聚到一个类),低耦合(不同类间的依赖尽可能少)。

1. 单一职责原则

  • 定义:一个对象应该只包含单一职责,并且该职责被完整的封装在一个类中。
  • 原因:一个类承担职责越多,难以复用,一个职责变化时可能影响其他职责。

2. 开闭原则

  • 定义:一个类应该对扩展开方, 对修改关闭(是类在不被修改的前提下被扩展)。

3. 里氏代换原则

  • 定义:所有引用父类的地方必须能透明的使用其子类的对象。

4. 依赖倒转原则

  • 定义:高层模块不应该依赖底层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象(面向接口编程,而非实现)。
  • 应用:函数参数,返回值类型,组合聚合

5. 接口隔离原则

  • 定义:客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上(多个专门接口,而不是单一的总接口,要满足单一职责原则)。
  • 接口粒度也不应太小,否则接口泛滥,不利于维护。

6. 合成复用原则

  • 定义:尽量使用组合/聚合(关联关系),而不是继承来达到复用的目的(继承高耦合)。
  • 白箱复用(继承):基类内部细节对子类可见, 基类改变子类也需改变;是静态的,不能在运行时发生改变,灵活性差。
  • 黑箱复用(组合/聚合):关联对象细节不可见;动态引用与成员对象相同的其他对象。

7. 迪米特法则

  • 定义:又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的 public 方法,不对外泄露任何信息(只与直接的朋友通信)。
  • 两个类不必直接通信,那么这两个类就不应当发生直接相互作用,如果一个类需要调用另一个类的某个方法,可以通过第三方转发调用(加一层中间层)。
  • 只与直接的朋友通信。
  • 直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖,关联,组合,聚合等(全局/成员变量)。其中,我们称出现【成员变量,方法参数,方法返回值中的类为直接的朋友】,而出现在【局部变量】中的类不是直接的朋友。也就是说,陌生的类最好不要以局部变量的形式出现在类的内部。

三. 设计模式

1. 概述

  • 设计模式是一套反复使用丶多数人知晓的丶经过分类编目的丶代码设计经验的总结,使用设计模式是为了可重用代码丶让代码更容易被理解丶提高代码的可靠性。

2. 分类

①根据目的分类

  • 创建型模式:主要用于创建对象。
  • 结构型模式:主要用于处理类或对象的组合。
  • 行为型模式:主要用于描述类或对象怎样交互和怎样分配职责。

②根据范围分类

  • 类模式:处理类和子类之间的关系,这些关系通过继承/实现建立,在编译时刻就被确定下来,是静态的。
  • 对象模式:处理对象间的关系,通过关联关系建立,这些关系在运行时变化,更具动态性。

3. 创建型模式

  • 创建型模式关注对象创建的过程,它将对象的创建和使用分离,在使用对象时无需知道对象的创建细节。使得相同的创建过程可以多次复用,且修改两者中的任何一个对另一个几乎不造成任何影响。

简单工厂模式

工厂方法模式

抽象工厂模式

建造者模式

原型模式

单例模式

4. 结构型模式

  • 结构型模式关注如何将现有类或现有对象组织在一起形成更加强大的结构。
  • 结构型模式可以描述两种不同的东西:类与类的实例,根据这一点,结构型模式可以分为类结构型模式和对象结构模式。类结果型模式关心类的组合,由多个类可以组合成一个更大的系统,一般通过继承实现;对象结构型模式关心类与对象的组合,通过关联关系使得在一个类中定义另一个类的实例,然后通过该对象调用其方法。

适配器模式

桥接模式

组合模式

装饰模式

外观模式

享元模式

代理模式

5. 行为型模式

职责链模式

命令模式

解释器模式

迭代器模式

中介者模式

备忘录模式

观察者模式

状态模式

策略模式

模板方法模式

①①访问者模式