设计模式六大原则

280 阅读3分钟

单一职责原则

单一职责原则又叫SRP原则,定义:应该有且只有一个原因引起类的变更

  • 难点:在于对于职责的定义,什么是类的职责以及怎么划分类的职责,

  • 优点:类的可读性提高、复杂性降低,可维护性提高,变更引起的风险降低

  • 适用性:适用于接口、类同时也适用于方法

里氏替换原则

子类对象能替换程序中父类出现的任何地方,并且保证原有程序逻辑不发生变化,以及正确性不会发生改变

  • 作用:里氏替换原则是指导继承关系中子类该如何设计
  • 注意事项:子类可以改变父类函数内部的实现逻辑,但是不能改变函数原有的约定,这里的约定包括函数要实现的功能,对输入、输出参数、异常的约定,甚至包括注释中罗列的特殊说明

依赖倒置原则

依赖倒置原则的定义:高层模块不应该依赖底层模块,两者都应该依赖抽象、抽象不应该依赖细节、细节应该依赖抽象。

依赖倒置在Java中的表现为:模块间的依赖通过抽象来实现,实现类之间不直接依赖,其依赖关系通过接口或者抽象类来实现。抽象类或接口不依赖于实现类。实现类依赖接口或者抽象类。更简洁的定义为面向接口编程

依赖的三种实现方式

  • 构造函数传递依赖对象
  • Setter方法传递依赖对象
  • 接口声明依赖对象(通过方法传参传递依赖对象)

接口隔离原则

接口隔离原则的定义:客户端不应该依赖不需要实现的接口

迪比特原则

迪米特原则的定义:不该有直接依赖关系的类之间不要有依赖,有依赖的类之间,尽量依赖必要的接口

开闭原则

开闭原则的定义:软件实体(类、抽象、方法)应该对扩展开放,对修改关闭,即通过扩展来实现功能,而不是通过修改原有功能来实现

开闭原则使用方法:

  • 抽象限定:通过接口或抽象类可以约束一组可能变化的行为,并且实现对扩展开放,其中包含三层含义。
    • 第一:通过接口或者抽象类约束,对扩展进行边界限定,不允许存在接口或者抽象类中没有的public方法
    • 第二:参数类型引用对象,最好使用抽象类或者接口,而不是实现类
    • 第三:抽象层保持稳定,一旦确定不允许修改
  • 元数据(配置文件)控制模块行为
  • 制定项目章程
  • 封装变化:将相同的变化封装到一个接口或抽象类中,不同的变化封装到不同的接口或抽象类中