博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
30 . (Java)面向对象编程六大基本原则
阅读量:4991 次
发布时间:2019-06-12

本文共 1698 字,大约阅读时间需要 5 分钟。

六大基本原则可分为: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

定义:一个对象应该对其他对象有最少的了解

广义的迪米特法则在类的设计上的体现:
优先考虑将一个类设置成不变类。
尽量降低一个类的访问权限。
谨慎使用Serializable。
尽量降低成员的访问权限。
 
 
 
暂时介绍一些基本的概念,具体这些原则也会体现在我们的设计模式中。后面边学习边更新这边文章举例。
 
 
 

参考文献:

《Java与模式》

https://blog.csdn.net/qq_26440221/article/details/53746433

https://blog.csdn.net/niudasheng/article/details/80595217

转载于:https://www.cnblogs.com/Hermioner/p/10211477.html

你可能感兴趣的文章
Tarjan求点双连通分量
查看>>
Tomcat项目自动部署脚本
查看>>
Python操作MySQL数据库
查看>>
自动化部署之jenkins及简介
查看>>
CodeForces 1152D Neko and Aki's Prank
查看>>
Python 用pygame模块播放MP3
查看>>
inline必须在定义、实现都标记
查看>>
从单链表到循环链表
查看>>
百度招聘无处不在!
查看>>
丢失控制文件恢复实验记录--3(当前的控制文件损坏,归档日志文件损坏且备份的控制文件是旧的情况恢复数据库)...
查看>>
Ganglia监控MySQL
查看>>
反射和动态导入模块
查看>>
信息社会
查看>>
Mysql存储引擎概念特点介绍及不同业务场景选用依据
查看>>
关于Java类Calendar做统计时 获取日期的一些常见操作
查看>>
从程序员转向淘宝店主的探索
查看>>
openstack 中国联盟公开课參会总结
查看>>
约瑟夫环问题详解 (c++)
查看>>
Ubuntu 配置VNC以及使用VNC连接时,无法显示系统菜单栏,解决方法
查看>>
BZOJ.3990.[SDOI2015]排序(DFS)
查看>>