1、单一职责原则
1.1、什么是单一职责原则?
简单的说,就是一个类只负责一个职责!
1.2、为什么要遵循这个原则?
可以提高代码的可读性,可扩展性,可维护性!
假如我们把世界上天文学,地理学,历史等全部知识都汇总到一本书上,那这本书应该有多么的厚,没有人会想读这本书,更不会有人在这本书的后面补充内容!
2、里氏替换原则
2.1、什么是里氏替换原则
简单的说,尽量不要重写父类方法,如果需要重写,输入的参数尽量相同或者更宽松,输出的结果尽量相同或更加约束!
2.2、为什么要遵循这个原则?
可以提高代码的可控性!
假设有一个光头佬开发了类A,你感觉写的还不错,想基于A开发A1,但是发现A的某些方法对你来说不适用,你就重写了A的方法,顺带把用到A的地方都换成A1了,此时代码运行结果就异常了,那不好意思,你完蛋了光头佬过来削你了!如果需要重写,输入的参数尽量相同或者更宽松,输出的结果尽量相同或更加约束!
3、依赖倒置原则
3.1、什么是依赖倒置原则?
简单的说,就是面向接口编程!类和类相互不要又依赖,要依赖于接口!
3.2、为什么要遵循这个原则?
可以提高代码的灵活性!
假如一个Book
类,包含getContent()
方法,还有一个Mother
类,Mother
有Read()
方法,参数为Book
,方体体为调用book.getContent()
方法,这相当于Mother
类依赖与Book
类,但是我们的Mother
,不可能只会读书把,还会读报纸把!所以说我们需要一个IReader
的接口,里面有getContent()
抽象方法,Book
,NewsPaper
都实现这个接口即可!而Mother
的Read()
方法的参数为IReader
就欧克了!
4、接口隔离原则
4.1、什么是接口隔离原则?
简单的说,接口里面的抽象方法尽量少而精!
4.2、为什么要遵循这个原则?
可以提高我们代码的可读性,可维护性!
试想一下,我们设计功能模块的时候,把所有的抽象方法都放到一个接口,那么实现这个抽象接口的类,得把所有的方法都实现一遍,即使ctrl+c,ctrl+v
也很麻烦,如果真的这么做了,放心,必须实现这个接口的其他程序员,肯定会骂的这个人狗血淋头!
5、迪米特法则
5.1、什么是迪米特法则?
两种说法,第一种,只与直接朋友通信,第二种依赖的类暴露的方法越少越好!
5.2、为什么要遵循这个原则?
可以降低代码的耦合性,提高代码的复用性!
举个简单的例子,给电脑关机的时候,会有保存应用程序,关闭应用程序,关闭屏幕,关闭主机,还有一个close方法包含了前面四个步骤!如果这5个方法都对外暴露,对于我们用户来说其实只需要调用close方法就可以了,但是每个人的理解都不一样,有的人全部调用,有的人调用几个,这不无疑增加负担嘛,大大提高了耦合性!
6、开闭原则
6.1、什么是开闭原则?
简单的说,对类或者功能的修改保持关闭状态,对扩展保持开放状态!
6.2、为什么要遵循这个原则?
可以大大降低我们代码的错误率!
我们在了解Spring的时候,应该对AOP(面向切面编程)应该不陌生把,其实就是我们可以在方法调用前,或者调用后执行我们自己的逻辑,那这是不是和开闭原则很类似!
来个小总结,**单一职责原则
建议我们类的职责尽量单一,里氏替换原则
建议我们尽量不要修改父类的方法,依赖倒置原则
建议我们要面向接口编程,接口隔离原则
建议我们接口尽量小而精,迪米特法则
建议我们降低类之间的耦合,开闭原则
建议对原代码不要修改,而要扩展!**这些东西看似离我们很远,但是他会有助于我们带框架源码的理解,让我们更懂设计人的想法,让我们的代码更加优雅!当然上面只是我看了一些博客之后自己的理解,如有需要更正的地方,请大家评论区留言呀!同时可以推荐大家看看《大话设计模式》 + 《设计模式之禅》这两本书!
感谢大家的阅读,我是爱你三千遍,一个喜欢把简单问题复杂化,把复杂问题简单化的程序猿!❤
参考链接:https://blog.csdn.net/zhengzhb/article/details/7278174?utm_source=app&app_version=4.21.0&code=app_1562916241&uLinkId=usr1mkqgl919blen