设计模式概览

设计原则

总原则(开闭原则):对扩展开放,对修改关闭

1、单一职责原则:每个类应该实现单一的职责

2、里氏替换原则:子类对父类的方法尽量不要重写和重载

3、依赖倒转原则:面向接口编程,依赖于抽象而不依赖于具体

4、接口隔离原则:每个接口中不存在子类用不到却必须实现的方法

5、迪米特法则(最少知道原则):一个类对自己依赖的类知道的越少越好

6、合成复用原则:尽量首先使用合成/聚合的方式,而不是使用继承

UML关系

关系由弱到强:依赖 < 关联 < 聚合 < 组合 < 实现 < 泛化

依赖

概念:是一种 使用 的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖,在程序中一般表现为类 A 中的方法需要类 B 的实例作为其参数或者变量,而类 A 本身并不需要引用类 B 的实例作为其成员变量。

表示方法:虚线箭头,类 A 指向类 B

关联

概念:表示类与类之间的 联接,它使一个类知道另一个类的属性和方法,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,在程序中被关联类 B 以类属性的形式出现在关联类 A 中,也可能是关联类 A 引用了一个类型为被关联类 B 的全局变量。

表示方法:实线箭头,类 A 指向类 B

聚合

概念:聚合是关联关系的一种特例,是强的关联关系。聚合是整体和个体之间的关系,即 has-a 的关系,整体与个体可以具有各自的生命周期,个体可以属于多个整体对象,也可以为多个整体对象共享。程序中聚合和关联关系是一致的,只能从语义级别来区分。

表示方法:尾部为空心菱形的实线箭头(也可以没箭头),类 A 指向类 B

组合

概念:组合也是关联关系的一种特例。组合是一种整体与部分的关系,即 contains-a 的关系,比聚合更强。部分与整体的生命周期一致,整体的生命周期结束也就意味着部分的生命周期结束,组合关系不能共享。程序中组合和关联关系是一致的,只能从语义级别来区分。

表示方法:尾部为实心菱形的实线箭头(也可以没箭头),类 A 指向类 B

实现

概念:实现是一种 类与接口 的关系,表示类是接口所有特征和行为的实现,在程序中一般通过类实现接口来描述。

表示方法:空心三角形箭头的虚线,实现类指向接口

泛化

概念:泛化是一种 一般与特殊一般与具体 之间关系的描述,具体描述建立在一般描述的基础之上,并对其进行了扩展。在程序中是通过继承类实现的。比如狗是对动物的具体描述,在面向对象设计的时候一般把狗设计为动物的子类。

表示方法:空心三角形箭头的实线,子类指向父类

分类

  • 创建型模式(5)
    • 简单工厂模式(不属于)
    • 工厂方法模式
    • 抽象工厂模式
    • 单例模式
    • 建造者模式
    • 原型模式
  • 结构型模式(7)
    • 代理模式
    • 适配器模式
    • 桥梁模式
    • 装饰器模式
    • 门面模式
    • 组合模式
    • 享元模式
  • 行为型模式(11)
    • 解释器模式
    • 策略模式
    • 观察者模式
    • 责任链模式
    • 模板方法模式
    • 状态模式
    • 命令模式
    • 迭代器模式
    • 调解者模式
    • 备忘录模式
    • 访问者模式

参考