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

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

女神

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

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

2,重構過程

? ? ? ? 1> 目標:① 項目移除任意業(yè)務模塊,編譯器不能報錯,甚至運行期不報錯。

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

? ? ? ? 2> 思路。

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

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

? ? ? ? ? ? 結構上,我們劃分為 中間層,功能提供者,功能調用者。下面是實現(xiàn):

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

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

加載webImage的協(xié)議

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

#pragma mark -??中間層

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

中間層只有一個表屬性

中間層的結構十分簡單,只有一個字典屬性,是用來記錄Protocol 與對應實現(xiàn)類名。上圖。

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

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

中間層獲取delegte對象接口

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

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


#pragma mark -? ?功能提供者

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

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


#pragma mark -???功能調用者

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

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

至此我們就可以隨意更換webImage模塊,甚至直接刪掉這個模塊也不會報錯。

完結撒花。


小結:

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

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

相關閱讀更多精彩內容

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

友情鏈接更多精彩內容