iOS設計模式 介面卡模式

2021-07-29 18:47:45 字數 1808 閱讀 9975

2023年系統的學習了ios的設計模式,在整理文件時發現有幾篇總結因為當時事情耽誤沒有發出,近幾天會逐漸發布,藉此在複習一下ios的設計模式。

相信在以後的工作中會用到。下面補上介面卡模式的內容

1.介紹

介面卡模式主要應用於「希望復用一些現存的類,但是介面又與復用環境要求不一致的情況」,在遺留**復用、類庫遷移等方面非常有用。

2.分類

介面卡模式有物件介面卡和類介面卡兩種形式的實現結構,但是類介面卡採用「多繼承」的實現方式,帶來了不良的高耦合,所以一般不推薦使用,另外,oc中也不支援多重繼承。物件介面卡採用「物件組合」的方式,更符合松耦合規範。

結構圖

有兩種實現介面卡模式的方式。第一種是通過繼承來適配兩個介面,這稱為類介面卡。

(1)類介面卡

在gof介紹設計模式的書中,類介面卡是通過多重繼承來實現的。oc中沒有多繼承,但在oc中,類可以實現協議,同時又繼承父類,達到c++多繼承的效果。要在oc中實現類介面卡,首先需要有定義了客戶端要使用的一套行為的協議,然後要用具體的介面卡類來實現這個協議。介面卡類同時也要繼承被適配者。類介面卡結構圖如下所示:

從圖中可以看到,adapter是乙個target型別,同時也是adaptee型別。它過載了target的request方法,沒有過載adaptee中的specificrequest方法,而是在adapter的request方法的實現中,呼叫父類的specificrequest方法。只有當target是協議而不是類時,類介面卡才能夠用oc來實現,因為oc中是沒有多重繼承的。

(2)物件介面卡

實現介面卡模式的第二種方式稱為物件介面卡。與類介面卡不同,物件介面卡不繼承被適配者,而是組合了乙個對它的引用。物件介面卡結構圖如下所示:

從兩個結構圖可以看到,target和adapter的關係相同,adapter和adaptee之間的關係,由繼承變成了關聯。這種關係下,adapter需要保持乙個對adaptee的引用。在request方法中,adapter傳送[_adaptee specificrequest]訊息給adaptee,以完成客戶端的請求。

3.ios的框架中的介面卡

oc中常用的委託(delegate)模式屬於物件介面卡。以常用的uitableviewdelegate為例,我這裡先畫出它的結構圖,如下所示:

uitableview(物件介面卡中的client角色)處理選中行事件時,訊息會傳遞給uitableviewdelegate(物件介面卡中target角色),然後呼叫myviewcontroller(物件介面卡中adapter角色)裡面的- (void)tableview:(uitableview )tableview didselectrowatindexpath:(nsindexpath )indexpath方法來進行處理,在myviewcontroller的這個方法中,我們會呼叫其他物件(比如說我們可能會呼叫詳情detailviewcontroller物件來跳轉到詳情頁面)來處理該訊息。

3.使用場景

在以下各種情況下可以考慮使用介面卡模式:

• 需要使用乙個已經存在的類,而它的介面不符合新環境的規範。

• 想建立乙個可以復用的類,該類可以與其他不相關的類或不可預見的類(即那些介面可能不一定相容的類)協同工作。

這是demo的**:

iOS設計模式 介面卡

ios設計模式 介面卡 1.為了讓客戶端盡可能的通用,我們使用介面卡模式來隔離客戶端與外部引數的聯絡,只讓客戶端與介面卡通訊.2.本教程實現了介面卡模式的類介面卡與物件介面卡兩種模式,各有優缺點.3.如果對物件導向基本原理以及設計模式基本原理不熟悉,本教程會變得難以理解.原始碼 名字 propert...

設計模式 介面卡模式 類介面卡 物件介面卡

乙個小例子,便於理解,上 這是我們造的。現在想用這個方法。public class adaptee 類介面卡。對我們想要的方法封裝一下,target就能像之前一樣,呼叫request方法即可。public class adapter1 extends adaptee implements targe...

設計模式之介面卡模式(類介面卡模式)

介面卡模式,即定義乙個包裝類,用於包裝不相容介面的物件 包裝類 介面卡adapter 被包裝物件 適配者adaptee 被適配的類 把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式的形式分為 類的介面卡模式和物件的介面卡模式 模式原理...