30 . (Java)面向对象编程六大基本原则
六大基本原则可分为:SOLID和迪米特原则
1.单一职责原则S——优化代码的第一步
Single Responsibility Principle,简称SRP
定义:一个类只负责一项职责。
好处:降低类的复杂度,一个类只负责一个职责,其逻辑一定会比一个类负责多项职责要简单,同时也易于维护,提高类的可读性,提高系统的可维护性。如果单一职责原则遵守的好,那么当修改一个功能时可以显著降低对其它功能的影响。
note: 虽说我们要遵守单一职责原则,但是也不是说死板的对每一个细节都严格遵守,也要视情况而定:如果一个类的逻辑非常简单且可以保证变化极小,此时可以在代码级别上违反单一职责原则;另外当一个类中方法很少时,也可以在方法的级别上违反这一原则。(这里我这么理解单一职责原则:分为两个层次,最高层次是类的层次,其次是方法层次上)但是如果一个类相对庞大,类中方法较多时,一定要遵守单一职责原则;宁愿在第一次扩展时花费精力完成重构,也要遵守这一原则,否则会给以后的扩展带来不可预估的灾难!
2.开闭原则O——让程序更稳定、更灵活
Open Close Principle,简称OCP
定义:软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是,对于修改是封闭的
在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。
3.里氏替换原则L——构建扩展性更好的系统
Liskov Substitution Principle,简称LSP
定义:所有引用基类的地方必须能透明地使用其子类的对象
里氏替换原则的严格表达是:如果对每一个类型为T1的对象O1,都有类型为T2的对象O2,使得以T1定义的所有程序P在所有的对象o1都替换成o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型。
比如:假设有两个类,一个是Base类,另一个是Derived类,并且Derived类是Base类的子类。那么一个方法如果可以接收一个基类对象b的话:method1(Base b),那么它必然可以接受一个子类对象b,也即可以有method1(d).
4.接口隔离原则I——系统有更高的灵活性
InterfaceSegregation Principles,简称ISP
定义:类间的依赖关系应该建立在最小的接口上
使用多个专门的接口比使用单一的总接口要好。
5.依赖倒置原则D——让项目拥有变化的能力
Dependence Inversion Principle,简称DIP
依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
6.迪米特原则——更好的可扩展性
Law of Demeter,简称LOD
定义:一个对象应该对其他对象有最少的了解
参考文献:
《Java与模式》
https://blog.csdn.net/qq_26440221/article/details/53746433
https://blog.csdn.net/niudasheng/article/details/80595217