日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

解耦合

發(fā)布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解耦合 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

廣大程序猿同胞,經(jīng)常會看到“解耦合”,也有很多人,會用這個詞來裝X,但是,實際真正能理解的人,并不多。接下來,帶大家深入淺出的走一遍,如何解耦合。

首先,我們要知道,為什么要解耦合:通常,我們做一個項目,會用到很多基礎功能塊,比如xxx通信協(xié)議,xxxView等等,我們會把這種功能塊封裝成一個庫,如果這個庫,只能在這個指定的項目運行,這就叫高耦合,這就導致了,如果下次再次遇到一個類似的項目,需要用到同樣功能的功能塊時,你會要做很多重復工作。假設,每次使用json時,你都要對json庫進行改造,那將會是一個晴天霹靂。

但是,事與愿違,有些情況,還真的不太好解耦。

這里,我們先舉個栗子,比如排序。

一個排序功能,對于大部分比較初級的程序猿來說,可能會寫成這樣:

sort(List<Integer> list)

這樣就導致了一個問題所在,這個方法只能排序int型數(shù)據(jù),如果下一個項目,需要用到對String進行排序,那就很尷尬,感覺明明要成功了,但是又差一點。對,就是差這一點,就是代碼解耦的關鍵。

我們先要明確,我們需要做的是排序功能,在這個過程中,我們不可避免的需要使用2個數(shù)據(jù)的大小對比,而這個數(shù)據(jù),可能是任何數(shù)據(jù),也就是說,排序算法,我們是可以確定下來,做成不動的庫,但是有一個數(shù)據(jù)大小匹配是我們無法做到的,或者說是庫的耦合點,那怎么辦呢?

我們就讓使用我們這個功能塊的人,告訴我們就行啦。

下面,我們參考Android庫里面,有個排序的api

Collections.sort(List<T> list, Comparator<? super T> c);

這里,Comparator這個接口,就是使用者,需要實現(xiàn),并且傳遞進去的接口。這樣做,這個排序功能塊就可以應用在任何場合,達到一次開發(fā),受用終身的目的。是不是很神奇?

我們再舉個栗子,socket

我們在開發(fā)時,經(jīng)常會用到socket庫,而socket最常用,最常用的一個功能就是:“連接->發(fā)送數(shù)據(jù)->接收數(shù)據(jù)->斷開連接->回調(diào)結果”

所以,如果需要把這個流程,封裝成一個功能塊是很有意義的。

但是,這里有一個問題,是阻礙封裝的,就是 “接收數(shù)據(jù)->斷開連接”,socket讀取數(shù)據(jù)時,是一個inputStream,是個流,也就是說,其實,你并不知道,數(shù)據(jù)怎么樣才算接收 完整/完畢

可能,有的協(xié)議,是通過頭2個字節(jié)來判斷整個數(shù)據(jù)長度可能,有的協(xié)議是有幀頭,幀尾,轉(zhuǎn)義符來判斷整個數(shù)據(jù)長度……

這讓我們很頭疼,那怎么 解決了,既然無法知道的東西,就讓應用程序來告訴你唄。和上面一樣,傳入一個協(xié)議實現(xiàn)唄:

public interface UnZipDataAction{// 返回null,表示未接收完全,繼續(xù)接收,返回完整的byte[]就認為是已經(jīng)接收完畢,把結果返回給應用,并且斷開連接byte[] getRealData(byte[] recvData); ErrorCode getErrorCode(); }

這樣,我們就把“連接->發(fā)送數(shù)據(jù)->接收數(shù)據(jù)->斷開連接->回調(diào)結果”整個流程封裝成了通用的功能塊了。

解耦總結來說就是:你能知道的東西就寫死,不知道但是又必須知道的東西,就讓應用程序來告訴你,在java里面叫接口,在有些語言(OC, swift, C/C++)里面叫做代碼段。

總結

以上是生活随笔為你收集整理的解耦合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。