又叫做「整體-部分模式」,它使樹型結構的問題中,模糊了簡單元素和複雜元素的概念,客戶程式可以像處理簡單元素一樣來處理複雜元素,從而使得客戶程式與複雜元素的內部結構解耦
1、抽象元件類(component):組合中的物件宣告介面,實現所有類共有介面的行為。宣告用於訪問和管理component的子部件的介面。
2、葉子節點(leaf):葉節點物件,葉節點沒有子節點。由於葉節點不能增加分支和樹葉,所以葉節點的add和remove沒有實際意義。
3、元件集合類(composite):實現componet的相關操作,比如add和remove操作。其中包含component的容器,用來儲存葉節點集合,有葉節點行為,用來儲存葉節點集合。
1、定義抽象元件介面
2、實現葉子節點類,實現抽象元件類的介面
3、實現元件集合類,實現抽象元件類的介面
4、定義環境類,將葉子節點和元件集合加入根元件集合
平常使用的目錄、資料夾
組合模式聽說去很玄乎,其實也並不複雜。為什麼?大家可以先想一下資料結構裡面的二叉樹是怎麼回事。為什麼就是這麼乙個簡單的二叉樹節點既可能是葉節點,也可能是父節點?
typedef struct _node
node;
那什麼時候是葉子節點,其實就是left、right為null的時候。那麼如果它們不是null呢,那麼很明顯此時它們已經是父節點了。那麼,我們的這個組合模式是怎麼乙個情況呢?
typedef struct _object
object;
就是這麼乙個簡單的資料結構,是怎麼實現子節點和父節點的差別呢。比如說,現在我們需要對乙個父節點的operate進行操作,此時的operate函式應該怎麼操作呢?
void operate_of_parent(struct _object* pobject)
}
當然,有了parent的operate,也有child的operate。至於是什麼操作,那就看自己是怎麼操作的了。
void operate_of_child(struct _object* pobject)
父節點也好,子節點也罷,一切的一切都是最後的應用。其實,使用者的呼叫也非常簡單,就這麼乙個簡單的函式。
void process(struct object* pobject)
C語言和設計模式(之組合模式)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!組合模式聽說去很玄乎,其實也並不複雜。為什麼?大家可以先想一下資料結構裡面的二叉樹是怎麼回事。為什麼就是這麼乙個簡單的二叉樹節點既可能是葉節點,也可能是父節點?typedef struct nodenode 那什麼時候是葉子節點,其實就是left ...
5 C語言和設計模式(之組合模式)
組合模式聽說去很玄乎,其實也並不複雜。為什麼?大家可以先想一下資料結構裡面的二叉樹是怎麼回事。為什麼就是這麼乙個簡單的二叉樹節點既可能是葉節點,也可能是父節點?cpp view plain copy typedef struct node node 那什麼時候是葉子節點,其實就是left right...
22 C語言和設計模式(之組合模式)
組合模式聽說去很玄乎,其實也並不複雜。為什麼?大家可以先想一下資料結構裡面的二叉樹是怎麼回事。為什麼就是這麼乙個簡單的二叉樹節點既可能是葉節點,也可能是父節點?cpp view plain copy typedef struct node node 那什麼時候是葉子節點,其實就是left right...