六大设计原则有:
- 单一职责原则
- 开闭原则
- 里式替换原则
- 迪米特法则原则
- 接口隔离原则
- 依赖倒置原则
单一职责原则
规定一个类应该只有一个发生变化的原因。
当一个Class类负责超过两个及以上的职责时,就在需求的不断迭代、实现类持续扩张的情况下,就会出现难以维护、不好扩展、测试难度大和上线风险高等问题。
如果一个类有多于一个的原因被改变,那么这个类就有超过两个及以上的职责。而单一职责约定一个类应该有且仅有一个改变类的原因。
通过利用单一职责原则的代码优化后,现在每个类都只负责自己的用户行为。后续无论扩展新的功能还是需要在某个时刻修改某个用户行为类,都可以非常方便地开发和维护。在项目开发的过程中,尽可能保证接口的定义、类的实现以及方法开发保持单一职责,对项目后期的迭代和维护会有很大的帮助。
开闭原则
在面向对象编程领域中,开闭原则规定软件中的对象、类、模块和函数对扩展应该是开放的,但对于修改是封闭的。这意味着应该用抽象定义结构,用具体实现扩展细节,以此确保软件系统开发和维护过程的可靠性。开闭原则的核心思想也可以理解为面向抽象编程。
对于外部的调用方来说,只要能体现出面向抽象编程,定义出接口并实现其方法,即不修改原有方法体,只通过继承方式进行扩展,都可以体现出开闭原则。
如果之前的类定义了一个变量,而又要修改的话,就重新定义一个子类,在子类中对该变量重新定义,并且**@Override**相关方法。
里式替换原则
继承必须确保超类(父类)所拥有的性质在子类中仍然成立
如果Son是Parent的子类型,那么所有Parent类型的对象都可以在不破坏程序的情况下被Son类型的对象替换。
简单来说,子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说:当子类继承父类时,除添加新的方法且完成新增功能外,尽量不要重写父类的方法。
- 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
- 子类可以增加自己特有的方法。
- 当子类的方法重载父类的方法时,方法的前置条件(即方法的输入参数)要比父类的方法更宽松。
- 当子类的方法实现父类的方法(重写、重载或实现抽象方法)时,方法的后置条件(即方法的输出或返回值)要比父类的方法更严格或与父类的方法相等。
注:即父类输入参数范围小于子类输入参数范围,父类输出结果范围大于子类输出结果范围。
迪米特法则原则
迪米特法则(Law of Demeter,LoD)又称为最少知道原则(LeastKnowledge Principle,LKP),是指一个对象类对于其他对象类来说,知道得越少越好。也就是说,两个类之间不要有过多的耦合关系,保持最少关联性。
有内在关联的类要内聚,没有直接关系的类要低耦合。
接口隔离原则
客户端不应该被迫依赖于它不使用的方法。该原则还有另外一个定义:一个类对另一个类的依赖应该建立在最小的接口上。
接口隔离原则(Interface Segregation Principle,ISP)要求程序员尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法。
接口隔离是为了高内聚、低耦合。
- 接口尽量小,但是要有限度。一个接口只服务于一个子模块或业务逻辑。
- 为依赖接口的类定制服务。只提供调用者需要的方法,屏蔽不需要的方法。
- 提高内聚,减少对外交互。让接口用最少的方法完成最多的事情。
依赖倒置原则
依赖倒置原则(Dependence Inversion Principle,DIP)是指在设计代码架构时,高层模块不应该依赖于底层模块,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。