OC協(xié)議在解耦中的應(yīng)用

OC協(xié)議在解耦中的應(yīng)用

女神

1,oc中利用協(xié)議代理解耦,

? ? delegate是OC中常用傳值模式,這是一種很好的設(shè)計(jì)模式。但是日常開發(fā)中僅限于傳值,不能充分發(fā)揮它的價(jià)值。其本質(zhì)是將接口與實(shí)現(xiàn)分離,下面是一種利用協(xié)議實(shí)現(xiàn)模塊解耦的思路。

2,重構(gòu)過程

? ? ? ? 1> 目標(biāo):① 項(xiàng)目移除任意業(yè)務(wù)模塊,編譯器不能報(bào)錯(cuò),甚至運(yùn)行期不報(bào)錯(cuò)。

? ? ? ? ? ? ? ? ? ? ? ? ?② 不允許硬編碼,不允許硬編碼,不允許硬編碼,,,

? ? ? ? 2> 思路。

? ? ? ? ? ? 利用協(xié)議聲明接口,在需要調(diào)用接口的地方只引入?yún)f(xié)議,然后通過中間層獲取該協(xié)議實(shí)現(xiàn)實(shí)例對(duì)象,調(diào)用接口。

? ? ? ? 3> 實(shí)現(xiàn)。

? ? ? ? ? ? 結(jié)構(gòu)上,我們劃分為 中間層,功能提供者,功能調(diào)用者。下面是實(shí)現(xiàn):

#pragma mark - ?聲明協(xié)議

我們以加載網(wǎng)絡(luò)圖片為例,先聲明協(xié)議接口。如下圖

加載webImage的協(xié)議

協(xié)議這個(gè)要?dú)w結(jié)到公用層,看個(gè)人吧,我思考了很久,最后把它抽出來放在公用層,這是個(gè)值得思考的問題。

#pragma mark -??中間層

中間層的作用:記錄協(xié)議以及對(duì)應(yīng)遵守協(xié)議的實(shí)現(xiàn)類,當(dāng)調(diào)用者要獲取該協(xié)議對(duì)應(yīng)實(shí)現(xiàn)實(shí)例對(duì)象時(shí),通過記錄的類名生成實(shí)例對(duì)象返回給調(diào)用者。

中間層只有一個(gè)表屬性

中間層的結(jié)構(gòu)十分簡(jiǎn)單,只有一個(gè)字典屬性,是用來記錄Protocol 與對(duì)應(yīng)實(shí)現(xiàn)類名。上圖。

中間層注冊(cè)協(xié)議的接口

中間層對(duì)于實(shí)現(xiàn)協(xié)議類的注冊(cè)接口,傳入一個(gè)協(xié)議,一個(gè)類名,中間層會(huì)將兩個(gè)參數(shù)保存到字典中。上圖。

中間層獲取delegte對(duì)象接口

對(duì)于獲取delegate對(duì)象,調(diào)用者要傳入一個(gè)協(xié)議。中間層根據(jù)記錄的協(xié)議對(duì)應(yīng)的類名,初始化一個(gè)對(duì)象返回給調(diào)用者,這個(gè)對(duì)象一定是遵守傳入?yún)f(xié)議的。上圖。

至此中間層的任務(wù)完成,不依賴任何功能模塊。


#pragma mark -? ?功能提供者

功能提供者:引入要實(shí)現(xiàn)的協(xié)議,遵守協(xié)議并實(shí)現(xiàn)協(xié)議中的方法。在load中將自己實(shí)現(xiàn)的協(xié)議注冊(cè)到中間層。

實(shí)現(xiàn)協(xié)議類的load方法


#pragma mark -???功能調(diào)用者

功能調(diào)用者:根據(jù)要調(diào)用的功能,引入對(duì)應(yīng)的協(xié)議,通過中間層獲取實(shí)現(xiàn)該協(xié)議的實(shí)例對(duì)象,并調(diào)用協(xié)議中的接口。

調(diào)用協(xié)議中的接口

至此我們就可以隨意更換webImage模塊,甚至直接刪掉這個(gè)模塊也不會(huì)報(bào)錯(cuò)。

完結(jié)撒花。


小結(jié):

????????這個(gè)思路是充分利用接口聲明與實(shí)現(xiàn)分開的思想。前提是認(rèn)為接口不包含實(shí)現(xiàn)代碼,沒有入侵性。用引入?yún)f(xié)議的方法代替引入實(shí)現(xiàn)類。從而是項(xiàng)目可以自由拆卸實(shí)現(xiàn)模塊,達(dá)到解耦的目的。 利用這個(gè)思路也可以完成去model化,減少跨模塊的model帶來的耦合。

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

相關(guān)閱讀更多精彩內(nèi)容

  • 新聞 區(qū)塊鏈?zhǔn)状喂_發(fā)行股票 今天,我們成為世界上第一個(gè)發(fā)行面向公眾的Token化股權(quán)發(fā)行的發(fā)行平臺(tái)。由于我們的協(xié)...
    區(qū)塊鏈交流閱讀 230評(píng)論 0 0
  • 作者:【美】喬舒亞·菲爾茨/瑞安·尼科迪默斯 出版社:博集天卷 / 湖南文藝出版社 副標(biāo)題:活出生命真意 出版年:...
    幸運(yùn)的小鹿閱讀 799評(píng)論 0 1
  • 寅二、遠(yuǎn)離處(分五科)卯一、乘標(biāo)【如是遠(yuǎn)離順退分法,修習(xí)能順勝分法時(shí),樂住遠(yuǎn)離。】這是第五科,「安立瑜伽」這一科。...
    德虔閱讀 335評(píng)論 0 0
  • 今天比昨天慢了一些,我一直告訴自己,不要著急,保持良好的狀態(tài)。 晨跑的狀態(tài)還在理想范圍內(nèi),只要每天認(rèn)真地跑完全程就...
    Moon_star閱讀 238評(píng)論 0 0
  • 剛復(fù)習(xí)完S3,迫不及待地想來寫一下。昨天跟專業(yè)第一的學(xué)姐談了一下,不想面對(duì)考研的我,為了保研,竟然在大二下開始...
    披著馬甲寫日記閱讀 527評(píng)論 0 1

友情鏈接更多精彩內(nèi)容