Table of Contents

一、设计模式基本概念

1. 七个原则

总原则:

  • 开闭原则 对扩展开放,对修改封闭。 在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。 想要达到这样的效果,我们需要使用接口和抽象类等。

  • 单一职责原则 不要存在多于一个导致类变更的原因,也就是说每个类应该实现单一的职责,否则就应该把类拆分。

  • 里氏替换原则 任何基类可以出现的地方,子类一定可以出现。里氏替换原则是继承复用的基石,只有当衍生类可以替换基类,基类才能真正被复用。通俗来讲:子类可以扩展父类的功能,但不能改变父类原有的功能。

  • 依赖倒置原则 高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。即针对接口编程,不要针对实现编程。在java 语言的表现为:

    image-20211025200028398

  • 接口隔离原则 每个接口中不存在子类用不到却必须实现的方法,如果不然,就要将接口拆分。使用多个隔离的接口,比使用单个接口(多个接口方法集合到一个的接口)要好。

  • 迪米特原则(最少知道原则) 一个类对自己依赖的类知道的越少越好。无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。这样当被依赖的类变化时,才能最小的影响该类。 最少知道原则的另一个表达方式是:只与直接的朋友通信。类之间只要有耦合关系,就叫朋友关系。耦合分为依赖、关联、聚合、组合等。我们称出现为成员变量、方法参数、方法返回值中的类为直接朋友。局部变量、临时变量则不是直接的朋友。我们要求陌生的类不要作为局部变量出现在类中。低耦合、高内聚

    image

  • 组合/聚合复用原则【Composition/Aggregation Reuse Principle(CARP) 】: 尽量使用组合和聚合少使用继承的关系来达到复用的原则。

2. 设计模式分类

(1) 创建型模式

创建型模式:用来描述 “如何创建对象”,它的主要特点是 “将对象的创建和使用分离”。包括单例、原型、工厂方法、抽象工厂和建造者 5 种模式

  • 单例模式

    保证一个类仅有一个实例,并提供一个访问它的全局访问点。

  • 工厂模式

    在众多设计模式当中,有一种被称为工厂模式的设计模式,它提供了创建对象的最佳方式。工厂模式可以分为:简单工厂模式、工厂方法模式和抽象工厂模式

    • 简单工厂模式

      在创建一个对象时不向客户暴露内部细节,并提供一个创建对象的通用接口。

    • 工厂方法模式

      定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类。

    • 抽象工厂模式

      提供一个接口,用于创建 相关的对象家族

  • 生成器模式

  • 原型模式

(2) 结构型模式

用来描述如何将类或对象按照某种布局组成更大的结构。包括代理、适配器、桥接、装饰、外观、享元和组合 7 种模式。

  • 适配器模式

    把一个类接口转换成另一个用户需要的接口。

(3) 行为型模式