写点什么

SOLID 五大框架设计原则

用户头像
Zzzz
关注
发布于: 2020 年 09 月 27 日

开闭原则(OCP)

开闭原则,OCP,全称为 Open/Close Principle。说的就是对扩展开放的,对修改是封闭的。一般我们给系统增加新功能,就是在原有的代码上面进行修改添加。而开闭原则,则是要求我们增加新功能,不需要修改原有的代码,就能进行功能的扩展。

那需要如何做呢?答案就是需要抽象。在设计类的过程中,我们需要充分考虑到这个类依赖哪些类,这些依赖是不是必要的,如果依赖的类改动了,那我们是不是也要跟着改动,如果是,我们能不能通过我们常用的一些设计模式,比如观察者模式,适配器模式等去改造,把他们进行解耦等等。


依赖倒置原则(DIP)

依赖倒置原则,Dependency Inversion Principle,软件开发过程中都会出现高层模块依赖低层模块,从而造成高层模块设计开发,总是要求低层模块已经开发完成,才可以使用。并且高层模块受低层模块的变动影响,耦合大,难于复用。而依赖倒置原则则是要求高层模块不依赖低层模块,低层模块也不依赖高层模块,而都是依赖一个抽象,这个抽象可以是一个规范,也可以是一个接口。这个抽象是属于高层的,高层负责定义这个抽象,低层负责实现这个抽象。

比较常用于指导框架的设计,框架调用业务应用的代码,而业务应用不会去调用框架。框架通过定义的抽象(接口),而业务应用负责去实现这个抽象(接口)从而达到这个目的。


里氏替换原则(LSP)

里氏替换原则,Liskov Principle,子类型必须能替换掉它们的基类型。


里氏替换原则主要是用于解决继承的问题的。设计开发过程中,我们经常会用到继承,但是如何判断这个继承是不是一个好的继承,合适的继承呢,此时我们就可以通过里氏替换原则来判断了。

 

通常子类继承一个父类,我们会通过 Is A 来判断,比如苹果 Is A 水果,汽车 Is A 车,但是有时候这种静态的判断并不一定是正确的,比如白马,黑马 Is  A 马,小马也是 Is A 马,使用白马与黑马替换马,被人骑是没问题的,但是如果使用小马替换,可能就会被人压死。软件运行是一个动态的过程,里氏替换原则就是通过动态的一个方式来判断的(把子类替换到程序中所有用到父类的地方,程序运行没有问题)。


单一职责原则(SRP)

单一职责原则,Single Responsibility Principle,又被称为内聚性原则,意为,一个类只能有一个引起它变化的原因。如果不是单一职责,就会导致程序设计的复杂,维护成本高。


一个类,只做一件事,比如一个长方形,如果定义了一个 draw()方法,一个 area()方法,同时具有画长方形,跟计算自身的面积的功能,就不是一个单一的职责。如果绘画长方型需要依赖几十兆的 GUI 库,而我们程序可能只需要计算长方形面积的方法,这时就会依赖到不必要的文件。所以,我们可以尝试把类拆分为 Geometric Rectangle 与 Rectangle,其中 Geometric Rectangle 拥有 draw()方法,Rectangle 拥有 area()方法就能很好的解决问题。

注:单一职责说的是职责单一,不是说只有单一方法。


接口隔离原则(ISP)

接口隔离原则,Interface Segregation Principle,又称接口分离原则。说的是不应该强迫客户端程序依赖他们不需要的方法。

ISP 与 SRP 的关系,它们是相关的,都和”内聚性“有关,

其中 SRP 指出的是如何设计一个类,让类只能一件事

ISP 则是指出如何设计一个接口,从客户的角度出发, 强调不要让客户看到它不需要的方法。


总结

这五个原则学习下来,就是感觉每个原则都能听懂,但是具体什么情况下使用,或者如何正确地使用这些原则,还是有点懵,可能还是由于开发水平的不够。学习过程中发现多个原则都有涉及到设计模式的运用,光是理解设计模式用掉不少脑力,接下来还是得努力学习设计模式,希望设计模式熟练后,对五大设计原则也能有更深的理解。


用户头像

Zzzz

关注

还未添加个人签名 2018.09.17 加入

还未添加个人简介

评论

发布
暂无评论
SOLID五大框架设计原则