面向对象的六大基本原则

2020-05-12  本文已影响0人  atmanye

前言:   

经常会在学习知识的时候记录一些笔记,但很多时候都会丢失没有去翻看,尝试开始写一些文章来记录学习中的一些知识点,一来是方便自己日后回顾知识点,二来如果也可以供正在学习的人参考。文章大多都是视频和一些博客知识点加以自己的总结,如果有不正确的地方可以指正修改,如有侵权的可提醒删除。

背景:请求网络数据时,需要增加平台参数/更换网络引擎

请求后台数据.png

若需求变更,需要添加一些平台的参数时,需要在每一处统一访问接口都添加上,繁琐 而且容易遗漏。
且有时候接口返回的数据类型不一致,导致封装报错:例如有数据时,data为一个对象;无数据时data为一个字符串。此时会在gson解析时出错。

针对以上问题,对http请求进行了一次封装HttpUtils,后续维护需要添加参数时,可以直接添加到工具类中,特殊参数通过params.put传入。
但是问题还是很多,没有拓展性,代码也全都挤在一堆。

针对请求网络数据的demo背景,引出本章的内容:面向对象的基本原则

一、单一职责原则:

单一职责原则的英文名称是Single Responsibility Principle,简称SRP。它的定义是:就一个类而言,应该仅有一个引起它变化的原因
以请求网络数据为例,可以将其拆分为HttpUtil、HttpRequest、HttpCache 分别负责请求网络、请求参数、网络缓存的封装。|
HttpUti持有HttpRequest,HttpRequest持有HttpCache 且,
HttpUtil <—— HttpRequest <—— HttpCache  有无缓存 决定了是否发送网络请求;发送的网络请求也仅仅跟封装的参数相关

拆分之后,再引出问题-----若此时要更换第三方网络框架(OKHttp、xutils、volley等) 应该怎么办?


二、开闭原则:

开闭原则的英文全称是Open Close Principle,简称OCP
软件中的对象(类、模块、函数等)应该对于扩展是开放的,但是,对于修改是封闭的。

同样以请求网络数据为例,新建一个IHttpRequest接口,第三方网络网络请求框架实现这个接口,OKHttpRequest、xutilsRequest,要更换的换只需要在HttpUtil 中指定IHttpRequest即可。(IHttpRequest的更换尽量不要写在HttpUtils中,可以用一个初始化函数,在Application中进行一个初始化,需要时更替)。


三、里式替换原则:

全称是Liskov Substitution Principle,简称LSP。
通俗点讲,只要父类能出现的地方子类就可以出现。
最主要的体现就是继承和实现。

以上面的开闭原则为例,在初始化IHttpRequest中

public  static void initHttpRequest( IHttpRequest httpRequest){  ....代码省略 }

initHttpRequest(new OKHttpRequest());   //传入的是子类 OKHttpRequest

initHttpRequest(new  xutilsRequest ());    //传入的是子类  xutilsRequest 


四、依赖导致原则

Dependence Inversion Principle,简称DIP。
依赖反转原则指代了一种特定的解耦形式,高层模块不依赖低层次模块的细节,说白了高层次就是不依赖细节而是依赖抽象。
同样以网络请求为例:什么是高层次 什么是低层次? 
HttpUtils、IHttpRequest  、OKHttpRequest 、 xutilsRequest
高层是HttpUtils,依赖的是IHttpRequest抽象接口,而没有依赖具体实现的OKHttpRequest 、 xutilsRequest。


五、接口隔离原则

接口隔离原则英文全称是InterfaceSegregation Principles,简称ISP。
它的定义是:客户端不应该依赖它不需要的接口。另一种定义是:类间的依赖关系应该建立在最小的接口上。

仔细看以上的几个原则都跟接口有关系(面向抽象和面向接口)。

六、最少知识原则(迪米特原则)

定义:一个对象应该对其他对象有最少的了解。
通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少,类的内部如何实现、如何复杂都与调用者或者依赖者没关系,
调用者或者依赖者只需要知道他需要的方法即可,其他的我一概不关心。
跟单一原则有点像。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

上一篇下一篇

猜你喜欢

热点阅读