一、单一职责原则
定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。
问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。
解决方案:遵循单一职责原则。分别建立两个类T1、T2,使T1完成职责P1功能,T2完成职责P2功能。这样,当修改类T1时,不会使职责P2发生故障风险;同理,当修改T2时,也不会使职责P1发生故障风险。
遵循单一职责原的优点有:
- 可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;
- 提高类的可读性,提高系统的可维护性;
- 变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。
二、里氏替换原则
定义:原则上来讲,子类对象可以赋给父类对象,也可以说子类替换父类,并且出现在父类能够出现的任何地方。反过来说,父类对象是不能替换子类对象的,这种特性称为里氏替换原则
参考文章:https://blog.youkuaiyun.com/yisuowushinian/article/details/18976629
三、开放-封闭原则
定义:是说软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。
特征:对于扩展是开放的,对于更改是封闭的
也就是说:面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。
当变化发生时,我们通过创建抽象来隔离以后发生的同类变化,比如之前我们介绍的简单工厂模式中的实现两个数的运算的示例,示例就是通过抽象运算方法来对变化(增加乘除运算方法)进行扩展---开放性,而不是更改现有的代码(现有的加减运算方法)---封闭性。
参考文章:https://blog.youkuaiyun.com/yabay2208/article/details/73927991
四、依赖倒转原则
定义:高层模块不应该依赖底层模块,两个都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象。
参考文章:
https://blog.youkuaiyun.com/fightfaith/article/details/49556053
http://www.10tiao.com/html/396/201809/2650825669/1.html
五、迪米特法则