单一职责原则
- 一个类只负责一个职责,这个原则也适用于接口、方法。
好处:每个类只负责自己的那部分,类的负责度就会降低,如果职责划分的很清楚,那代码维护就更加容易。
1、代码的粒度降低,类的负责度降低
2、可读性提高,每个类的职责都很明确,可读性更好。
3、可维护性提高,保护线bug,更容易解决
4、改动代码所消耗的资源降低,更改的风险也降低了。
开闭原则
开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。该特性在产品化的环境中是特别有价值的,在这种环境中,改变源代码需要代码审查,单元测试以及诸如此类的用以确保产品使用质量的过程。遵循这种原则的代码在扩展时并不发生改变,因此无需上述的过程。
里氏替换原则
-
里氏替换原则通俗讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。 任何基类可以出现的地方,子类一定可以出现(子类可以替换父类)
-
好处:
- 提高代码的重用性,子类拥有父类的方法和属性
- 提高代码的可扩展性,子类可形似父类,但异于父类,保留自我的特性。
-
缺点:
-
继承是侵入性的,只要继承就必须拥有父类的所有方法和属性,在一定程度上约束了子类,降低了代码的灵活性。
-
增加了耦合,当父类的常量、变量或者方法被修改,需要考虑子类的修改,所以父类一旦有变动,可能造成糟糕的结构,要重构大量的代码
-
-
里氏替换原则对继承进行了规则上的约束:
-
子类必须实现父类的抽象方法,但不得重写(覆盖)父类的非抽象(已实现)方法。
-
子类中可以增加自己特有的方法。
-
当子类覆盖或者实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。(即只能重载不能重写)
-
当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
-
迪米特法则
- 迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信,不和陌生人说话。即如果两个类无需直接通信,就不要项目调用,可通过第三者交互。降低耦合度,提高模块的相对独立性。
- 优点
- 降低耦合度,提高模块的相对独立。
- 耦合度降低,则提高了类的可复用性,和系统的可扩展。
- 切点
- 过度使用中间者会增加系统的负责度。
接口隔离原则
- 客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。是为了约束接口、降低类对接口的依赖。
- 实现:
- 根据接口隔离原则拆分接口,必须满足单一职责原则。
- 接口尽量小,但要有限度。一个接口只服务于一个子模块或业务逻辑。
- 为依赖接口的类定制服务。只提供调用者需要的接口,屏蔽不需要的方法。
- 提高内聚,减少对外交互。
- 优点
- 拆分接口,提高系统的灵活性和可维护性。
- 提高了系统的内聚性,减少对外交互,降低系统的耦合度。
- 使用多个专用接口体现模块的层次。
依赖倒置原则
- 依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
- 高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
- 抽象不应该依赖于具体,具体应该依赖于抽象。
网友评论