设计模式-六大原则+模块分类

前言

介绍设计模式的六大原则模块分类

六大原则

1. 开闭原则

对扩展开放,对修改关闭,即软件实体应尽量在不修改原有代码的情况下进行扩展

2. 里氏替换原则

所有引用基类对象的地方能够透明地使用其子类的对象

是实现 开闭原则 的重要方式之一,在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,对子类对象来替换父类对象

3. 依赖倒置原则

抽象不应该依赖具体类,具体类应当依赖于抽象

在程序中尽量使用抽象层进行编程,将具体类写在配置文件中。如果系统行为发生变化,只需要对抽象层进行扩展,并修改配置文件,无需修改原有系统的源代码,满足开闭原则的要求

4. 单一职责原则

一个类(大到模块,小到方法)只负责一个功能领域中的相应职责

5. 迪米特法则(最少知道原则)

一个软件实体应当尽可能少地与其他实体发生相互作用

需要注意:

  • 在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,越有利于复用
  • 在类的结构设计上,每个类都应当尽量降低其成员变量和成员函数的访问权限
  • 在类的设计上,只要有可能,一个类型应当设计成不变类。
  • 对其他类的引用上,一个对象对其他对象的引用应当降到最低

6. 接口分离原则

使用多个专门的接口,而不使用单一的总接口

需要注意控制接口的粒度:

  • 接口不能太小,如果太小会导致系统中接口泛滥,不利于维护
  • 接口也不能太大

总结

里氏替换原则、依赖倒置原则是开闭原则的实现,结合6个原则看,我们在编程中最好都是抽象,低耦合,细微粒度

模式分类

  • 创建型
    • 主要用于描述如何创建对象
  • 结构型
    • 主要用于描述如何实现类或对象的组合
  • 行为型
    • 主要用于描述类或对象怎样交互及怎样分配职责

根据某个模式主要用于处理类之间的关系还是对象之间的关系,还可以分为:类模式对象模式

经常将两种分类方式结合使用,如单例模式是对象创建型模式,模块方法模式是类行为型模式

1. 创建型

主要用于描述如何创建对象。将模块中对象的创建和对象的使用分离。外界只需要知道接口,不需要知道具体的实现细节,符合单一职责原则

  1. 简单工厂模式
  2. 工厂方法模式
  3. 抽象工厂模式
  4. 单例模式
  5. 生成器模式
  6. 原型模式

2. 结构型

主要用于描述如何实现类或对象的组合。

  • 类结构型模式关心类的组合:由多个类组合成一个更大的系统,一般只存在继承关系和实现关系
  • 对象结构型关心类与对象的组合:通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法。 根据“合成复用原则”,在系统中尽量使用关联关系来替代继 承关系,因此大部分结构型模式都是对象结构型模式。
  1. 外观模式
  2. 适配器模式
  3. 桥接模式
  4. 代理模式
  5. 装饰者模式
  6. 享元模式

3. 行为型

主要用于描述类或对象怎样交互及怎样分配职责

  1. 职责链模式
  2. 命令模式
  3. 解释器模式
  4. 迭代器模式
  5. 中介者模式
  6. 备忘录模式
  7. 观察者模式
  8. 状态模式
  9. 策略模式
  10. 模板方法模式
  11. 访问者模式