iOS開發 介面卡模式與觀察者模式

2021-07-13 19:35:03 字數 1556 閱讀 5692

何為介面卡模式?

介面卡模式,可以這麼說,用於連線兩種不同種類的物件,使其毫無問題地協同工作。有時它也稱為包裝器。其思想相當簡單,介面卡實現客戶端所要的某種介面的行為,同時,它又連線到另乙個具有完全不同介面與行為的物件。一邊是客戶端懂得如何使用的目標介面,另一邊是客戶端一無所知的被適配者。介面卡站在兩者之間,介面卡的主要作用是把被適配者的行為傳遞給管道另一端的客戶端。

基本上有兩種實現介面卡的方式。第一種是通過整合來適配兩個介面,這稱為類介面卡。類介面卡是通過多重整合來實現的。第二種是物件介面卡,與類介面卡不同,物件介面卡不繼承被適配者,而是組合了乙個對它的引用。

介面卡模式:將乙個類的介面轉換成客戶端希望的另乙個介面。介面卡模式使得原來由於介面不相容而不能一起工作的那些類可以一起工作。

類介面卡與物件介面卡的區別?

類介面卡:只針對單一的具體adaptee類,把adaptee適配到target;易於過載adaptee的行為,因為是通過直接的子類化進行的適配;只有乙個adapter物件,無需額外的指標間接訪問adaptee。

物件介面卡:可以適配多個adaptee及其子類;難以過載adaptee的行為,需要借助於子類的物件而不是adaptee本身;需要額外的指標以間接訪問adaptee並適配其行為。

顯然,委託(delegate)屬於物件介面卡。

何時使用介面卡模式?

@:已有類的介面與需求不匹配。

@:想要乙個可復用的類,該類能夠同可能帶有不相容介面的其他類協作。

@:需要適配乙個類的幾個不同子類,可是讓每乙個子類去子類化乙個類介面卡又不現實。那麼就可以使用物件介面卡(也叫委託)來適配其父類介面。

在oc當中通過委託(delegate)實現介面卡。

何為觀察者模式?

在觀察者模式中,乙個物件任何狀態的變更都會通知另外的對改變感興趣的物件。這些物件之間不需要知道彼此的存在,這其實是一種松耦合的設計。當某個屬性發生變化的時候,我們通常使用這個模式去通知其它物件。

此模式的通用實現中,觀察者註冊自己感興趣的其它物件的狀態的變更事件。當狀態發生變化的時候,所有觀察者都會收到通知。蘋果的推送通知就是乙個此模式例子。如果你要遵循mvc模式的概念,你需要讓模型物件與檢視物件在不相互直接引用的情況下通訊。這正是觀察者模式的用武之地。

cocoa通過使用通知(nsnotification)與kvo來實現觀察者模式。

通知與kvo

kvo機制讓物件可以感知屬性的變化,這種機制在模型-檢視-控制器模式的場景中尤其重要,因為它讓檢視物件可以經由控制器層觀察模型物件的變更。

通知與kvo的主要區別:通知,乙個中心物件為所有觀察者提供變更通知,主要從廣義上關注程式事件。kvo,被觀察的物件直接向觀察者傳送通知,繫結於特定物件屬性的值。

何時使用觀察者模式?

@:有兩種抽象類相互依賴。將它們封裝在各自的物件中,就可以對它們單獨進行改變和復用。

@:對乙個物件的改變需要同時改變其他物件,而不知道具體還有多少物件有待改變。

@:乙個物件必須通知其他物件,而它又不需要知道其他物件是什麼。

IOS常用設計模式 觀察者模式(IOS開發)

觀察者模式 observer 也叫發布 訂閱模式 publish subscribe 問題 在軟體設計中,經常需要對乙個物件的狀態改變,從而引起很多物件的狀態發生改變。這個特點很明顯,復用性強,而且物件之間匿名通訊。觀察者模式最為適合。原理 舉個例子 包括四個角色 1 抽象主題 subject 是個...

玩轉iOS開發 《iOS設計模式 觀察者模式》

文章轉至 這幾天在搗鼓新專案,在用通知中心的時候突然想到自己用了那麼久的通知中心,為啥不自己動手實現乙個呢?說幹就幹,於是乎就研究通知中心的原理,當然包括 kvo,這些都是基於觀察者模式 實現的,既然知道了原理,我們就do it 最後 工廠模式,如果覺得好的話,希望大家也可以打賞一下 嘻嘻 祝大家學...

iOS介面卡(Adapter)模式

介面卡可以讓一些介面不相容的類一起工作,它包裝乙個物件然後暴漏乙個標準的互動介面 具體實現步驟 1.協議 import protocol ptabadapterprotocol uicolor buttontintcolor uicolor backgroundcolor nsstring tabo...