面向對象的六大基本原則

前言:? ?

經(jīng)常會在學習知識的時候記錄一些筆記,但很多時候都會丟失沒有去翻看,嘗試開始寫一些文章來記錄學習中的一些知識點,一來是方便自己日后回顧知識點,二來如果也可以供正在學習的人參考。文章大多都是視頻和一些博客知識點加以自己的總結,如果有不正確的地方可以指正修改,如有侵權的可提醒刪除。

背景:請求網(wǎng)絡數(shù)據(jù)時,需要增加平臺參數(shù)/更換網(wǎng)絡引擎

請求后臺數(shù)據(jù).png

若需求變更,需要添加一些平臺的參數(shù)時,需要在每一處統(tǒng)一訪問接口都添加上,繁瑣 而且容易遺漏。
且有時候接口返回的數(shù)據(jù)類型不一致,導致封裝報錯:例如有數(shù)據(jù)時,data為一個對象;無數(shù)據(jù)時data為一個字符串。此時會在gson解析時出錯。


針對以上問題,對http請求進行了一次封裝HttpUtils,后續(xù)維護需要添加參數(shù)時,可以直接添加到工具類中,特殊參數(shù)通過params.put傳入。
但是問題還是很多,沒有拓展性,代碼也全都擠在一堆。


針對請求網(wǎng)絡數(shù)據(jù)的demo背景,引出本章的內容:面向對象的基本原則

一、單一職責原則:

單一職責原則的英文名稱是Single Responsibility Principle,簡稱SRP。它的定義是:就一個類而言,應該僅有一個引起它變化的原因。
以請求網(wǎng)絡數(shù)據(jù)為例,可以將其拆分為HttpUtil、HttpRequest、HttpCache 分別負責請求網(wǎng)絡、請求參數(shù)、網(wǎng)絡緩存的封裝。|
HttpUti持有HttpRequest,HttpRequest持有HttpCache?且,
HttpUtil <——?HttpRequest <——?HttpCache? 有無緩存 決定了是否發(fā)送網(wǎng)絡請求;發(fā)送的網(wǎng)絡請求也僅僅跟封裝的參數(shù)相關。

拆分之后,再引出問題-----若此時要更換第三方網(wǎng)絡框架(OKHttp、xutils、volley等) 應該怎么辦?


二、開閉原則:

開閉原則的英文全稱是Open Close Principle,簡稱OCP
軟件中的對象(類、模塊、函數(shù)等)應該對于擴展是開放的,但是,對于修改是封閉的。

同樣以請求網(wǎng)絡數(shù)據(jù)為例,新建一個IHttpRequest接口,第三方網(wǎng)絡網(wǎng)絡請求框架實現(xiàn)這個接口,OKHttpRequest、xutilsRequest,要更換的換只需要在HttpUtil 中指定IHttpRequest即可。(IHttpRequest的更換盡量不要寫在HttpUtils中,可以用一個初始化函數(shù),在Application中進行一個初始化,需要時更替)。


三、里式替換原則:

全稱是Liskov Substitution Principle,簡稱LSP。
通俗點講,只要父類能出現(xiàn)的地方子類就可以出現(xiàn)。
最主要的體現(xiàn)就是繼承和實現(xiàn)。

以上面的開閉原則為例,在初始化IHttpRequest中

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

initHttpRequest(new OKHttpRequest());? ?//傳入的是子類 OKHttpRequest

initHttpRequest(new? xutilsRequest ()); ? ?//傳入的是子類? xutilsRequest?


四、依賴導致原則

Dependence Inversion Principle,簡稱DIP。
依賴反轉原則指代了一種特定的解耦形式,高層模塊不依賴低層次模塊的細節(jié),說白了高層次就是不依賴細節(jié)而是依賴抽象。
同樣以網(wǎng)絡請求為例:什么是高層次 什么是低層次??
HttpUtils、IHttpRequest? 、OKHttpRequest 、?xutilsRequest
高層是HttpUtils,依賴的是IHttpRequest抽象接口,而沒有依賴具體實現(xiàn)的OKHttpRequest 、?xutilsRequest。


五、接口隔離原則

接口隔離原則英文全稱是InterfaceSegregation Principles,簡稱ISP。
它的定義是:客戶端不應該依賴它不需要的接口。另一種定義是:類間的依賴關系應該建立在最小的接口上。

仔細看以上的幾個原則都跟接口有關系(面向抽象和面向接口)。

六、最少知識原則(迪米特原則)

定義:一個對象應該對其他對象有最少的了解。
通俗地講,一個類應該對自己需要耦合或調用的類知道得最少,類的內部如何實現(xiàn)、如何復雜都與調用者或者依賴者沒關系,
調用者或者依賴者只需要知道他需要的方法即可,其他的我一概不關心。
跟單一原則有點像。

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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容