设计模式七大原则
设计模式七大原则
单一职责原则
简而言之,一个类只有一个责任。或者说类的功能要尽量单一尽量少。
原因:一个类如果有过多的功能,修改其中一个功能可能会影响其它功能的正常运行。
接口隔离原则
如果接口中某些方法不是其子类所必须的,或者说,接口中有子类用不到的方法,那我们就应该将接口进行拆分。如下图所示:

原因:很明显,B类与C类要实现不必要的方法,假如A接口内方法过多,那可就做太多无用功了。
依赖倒转原则
假如说某一个方法依赖一个对象的注入,那我们注入的对象类型不应该是一个类,而应该是此类的接口。俗称:面向接口编程。
举例说明:
假如说我们注入的是类
.png)
结果:
.png)
好了,现在我们又要加一部华为手机:
.png)
.png)
很明显,代码大增,修改繁琐。
现在,再把它改为面向接口:
.png)
这样是不是就简单很多。
最重要的还是易于扩展,假如说我们现在还要加一步OPPO手机,只需要实现Phone接口即可,再几乎不需要改动其它地方。
里氏代换原则
所有父类出现的地方,都可以用子类来替代,且功能不受影响。子类尽量不要去重写父类的方法。
原因:解决继承带来的侵入性、不够灵活、高耦合等问题。
侵入性是指子类继承父类,必须继承其所有方法和属性,这样父类也约束了子类。不够灵活。
高耦合是指一旦父类发生变动,会有极大可能性影响子类的功能,需要修改大量代码。
可以通过聚合,组合,依赖来解决继承带来的问题。
如图所示:

原本B类继承了A类,不够灵活耦合性也高,如果将A的功能提取出来作为一个Base类,A跟B都去继承这个Base类,那么在A出现的地方也可以B也可以出现,符合里氏代换原则。
开闭原则(最基础,最重要)
对扩展开放,对修改关闭(跟依赖倒转原则有点像)。
简而言之,就是增加新功能的时候,尽量做到不修改或者少修改代码,不影响原有的功能。形成一个热插拔效果。
个人认为还是使用了Java的多态性,即使用接口和抽象类。
迪米特法则
俗称最少知道原则,即一个类对自己依赖的类知道越少越好。
假如说A类依赖B类,那么A应该对B尽量少了解。
还有说法是只与直接朋友通信。
直接朋友:两个对象之间有耦合,被称为朋友关系。出现在成员变量,返回值,类型参数的关系是直接朋友关系。而出现在局部变量的关系是非直接朋友。
直接朋友关系:
.png)
非直接朋友关系:
.png)
合成复用原则
尽量使用合成和聚合,而不是继承。
总结
上面说了那么多法则,又是这,又是那,估计大家都晕了。其实在我看来无非都是围绕着怎么能够降低灵活性和耦合性来指定的。
是要解决在已经成型的代码上增删改新功能,做到尽量减少代码修改,且原有功能不被破环或者影响,最好是能够热插拔。从而总结的一些规则。
写在最后
本人三本菜鸡,道行还太浅,如果内容里有错误,还行希望各位大佬能帮忙指出!

浙公网安备 33010602011771号