C語言和設計模式(組合模式)

2021-10-01 13:04:09 字數 1302 閱讀 8521

又叫做「整體-部分模式」,它使樹型結構的問題中,模糊了簡單元素和複雜元素的概念,客戶程式可以像處理簡單元素一樣來處理複雜元素,從而使得客戶程式與複雜元素的內部結構解耦

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...