单一职责原则
单一职责原则又叫SRP原则,定义:应该有且只有一个原因引起类的变更
-
难点:在于对于职责的定义,什么是类的职责以及怎么划分类的职责,
-
优点:类的可读性提高、复杂性降低,可维护性提高,变更引起的风险降低
-
适用性:适用于接口、类同时也适用于方法
里氏替换原则
子类对象能替换程序中父类出现的任何地方,并且保证原有程序逻辑不发生变化,以及正确性不会发生改变
- 作用:里氏替换原则是指导继承关系中子类该如何设计
- 注意事项:子类可以改变父类函数内部的实现逻辑,但是不能改变函数原有的约定,这里的约定包括函数要实现的功能,对输入、输出参数、异常的约定,甚至包括注释中罗列的特殊说明
依赖倒置原则
依赖倒置原则的定义:高层模块不应该依赖底层模块,两者都应该依赖抽象、抽象不应该依赖细节、细节应该依赖抽象。
依赖倒置在Java中的表现为:模块间的依赖通过抽象来实现,实现类之间不直接依赖,其依赖关系通过接口或者抽象类来实现。抽象类或接口不依赖于实现类。实现类依赖接口或者抽象类。更简洁的定义为面向接口编程
依赖的三种实现方式
- 构造函数传递依赖对象
- Setter方法传递依赖对象
- 接口声明依赖对象(通过方法传参传递依赖对象)
接口隔离原则
接口隔离原则的定义:客户端不应该依赖不需要实现的接口
迪比特原则
迪米特原则的定义:不该有直接依赖关系的类之间不要有依赖,有依赖的类之间,尽量依赖必要的接口
开闭原则
开闭原则的定义:软件实体(类、抽象、方法)应该对扩展开放,对修改关闭,即通过扩展来实现功能,而不是通过修改原有功能来实现
开闭原则使用方法:
- 抽象限定:通过接口或抽象类可以约束一组可能变化的行为,并且实现对扩展开放,其中包含三层含义。
- 第一:通过接口或者抽象类约束,对扩展进行边界限定,不允许存在接口或者抽象类中没有的public方法
- 第二:参数类型引用对象,最好使用抽象类或者接口,而不是实现类
- 第三:抽象层保持稳定,一旦确定不允许修改
- 元数据(配置文件)控制模块行为
- 制定项目章程
- 封装变化:将相同的变化封装到一个接口或抽象类中,不同的变化封装到不同的接口或抽象类中