iOS應用開發中運用設計模式中的組合模式的例項解析

2021-07-12 07:23:37 字數 3037 閱讀 5922

何為組合模式?

組合模式讓我們可以把相同基型別的物件組合到樹狀結構中,其中父節點包含同型別的子節點。換句話說,這種樹狀結構形成"部分——整體"的層次結構。什麼是「部分——整體」的層次結構呢?它是既包含物件的組合又包含葉節點的單個物件的一種層次結構。每個組合體包含的其他節點,可以是葉節點或者其他組合體。這種關係在這個層次結構中遞迴重複。因為每個組合或葉節點有相同的基型別,同樣的操作可應用於它們中的每乙個,而不必在客戶端作型別檢查。客戶端對組合與葉節點進行操作時可忽略它們之間的差別。

組合模式:將物件組合成樹形結構以表示"部分——整體"的層次結構。組合使得使用者對單個物件和組合物件的使用的具有一致性。

何時使用組合模式?

1.想獲得物件抽象的樹形表示(部分——整體層次結構);

2.想讓客戶端統一處理組合結構中的所有物件。

在cocoa touch框架中使用組合模式

在cocoa touch框架中,uiview被組織成乙個組合結構。每個uiview的例項可以包含uiview的其他例項,形成統一的樹形結構。讓客戶端對單個uiview物件和uiview的組合統一對待。

視窗中的uiview在內部形成它的子檢視。它們的每乙個可以包含其他檢視而變成自己的子檢視的超檢視。新增進來的其他uiview成為它的子檢視。它們的每乙個可以包含其他檢視而變成自己的子檢視的超檢視。uiview物件只能有乙個超檢視,可以有零到多個子檢視。

檢視組合結構參與繪圖事件處理。當請求超檢視為顯示進行渲染時,訊息會先在超檢視被處理,然後傳給其子檢視。訊息會傳播到遍及整個樹的其他子檢視。因為它們是相同的型別——uiview,它們可以被統一處理。

組合模式的例項引用

組合模式的適用場合是,一般當你發現需求中是體現部分與整體層次的結構時,以及你希望使用者可以忽略組合物件與單個物件的不同,統一地使用組合結構中地所有物件時,就應該考慮使用組 合模式了。組合模式定義了基本物件和組合物件的類層次結構。基本物件可以被組合成更複雜的組合物件,而這個組合物件又可以被組合,這樣不斷地遞迴下去,這樣,在客戶**中,任何使用到基本物件的地方都可以使用組合物件了。說了這麼多,其實,組合模式就是讓客戶可以一致地使用組合結構和單個物件。那麼,下面還是給出類結構圖,想必大家一看就明白了。

上圖中類之間的關係基本可以模擬為一棵樹的關係。有根(component)、有枝節點(composite)、有葉子節點(leaf)。邏輯很清晰,結構也比較簡單。其實相當於葉子節點(leaf)和枝節點(composite)都繼承自根節點(component)。好的,下面給出簡單的**實現。

注意:本文所有**均在arc環境下編譯通過。

comcomponents類介面 //對應圖中的component

複製**

**如下:

#import

@inte***ce comcomponents:nsobject

-(comcomponents*)myinit:(nsstring*)myname;

-(void)add:(comcomponents*)c;

-(void)remove:(comcomponents*)c;

-(void)display:(int)depth;

@end

comcomponents類實現

複製**

**如下:

#import "comcomponents.h"

@implementation comcomponents

-(comcomponents*)myinit:(nsstring *)myname

-(void)add:(comcomponents *)c

-(void)remove:(comcomponents *)c

-(void)display:(int)depth

@end

leaf類介面

複製**

**如下:

#import "comcomponents.h"

@inte***ce leaf:comcomponents

-(leaf*)myinit:(nsstring*)myname;

@end

leaf類實現

複製**

**如下:

#import "leaf.h"

@implementation leaf

-(leaf*)myinit:(nsstring *)myname

-(void)add:(comcomponents *)c

-(void)remove:(comcomponents *)c

-(void)display:(int)depth

@end

composite類介面

複製**

**如下:

#import "comcomponents.h"

@inte***ce composite :comcomponents

-(composite*)myinit:(nsstring*)myname;

@end

composite類實現

複製**

**如下:

#import "composite.h"

@implementation composite

-(composite*)myinit:(nsstring *)myname

-(void)add:(comcomponents *)c

-(void)remove:(comcomponents *)c

-(void)display:(int)depth

@end

main方法呼叫

複製**

**如下:

#import

#import "leaf.h"

#import "composite.h"

int main (int argc,const char *argv)

return 0;}

好啦,組合模式結構還算簡單,關鍵還是活學活用啊,這個才是真難啊!

IOS開發中的設計模式彙總

ios開發學習中,經常弄不清楚ios的開發模式,今天我們就來進行簡單的總結和 一 模式 應用場景 當乙個類的某些功能需要由別的類來實現,但是又不確定具體會是哪個類實現。優勢 解耦合 敏捷原則 開放 封閉原則 例項 tableview的 資料來源delegate,通過和protocol的配合,完成委託...

java設計模式之 工廠模式在開發中的運用

寫乙個簡單的計算器 如果使用完全面向過程設計,那麼缺少 重用,不合理 應該採用物件導向的設計思想 採用工廠方法模式 工廠public inte ce operationfactorypublic class addoperationfactory implements operationfactor...

iOS開發之理解iOS中的MVC設計模式

模型 檢視 控制器 model view controller,mvc 是xerox parc在20世紀80年代為程式語言smalltalk 80發明的一種軟體設計模式,至今已廣泛應用於使用者互動應用程式中。在ios開發中mvc的機制被使用的淋漓盡致,充分理解ios的mvc模式,有助於我們程式的組織...