八、结构模式之组合(Composite)模式
組合模式屬于對象的結構模式,有時又叫做部分-整體模式,組合模式將對象組織到樹結構中,可以用來描述整體與部分的聯系。其可以使客戶端將單純元素和組合元素同等對待。
當需求中是體現部分與整體層次的結構時,以及你希望用戶可以忽略組合對象與單個對象的不同,統一地使用組合結構中的所有對象時,就應該考慮使用組合模式了。
組合模式(或叫合成模式)是將對象組合成樹形結構以表示部分-整體的層次結構。組合模式使得用戶對單個對象和組合對象的使用具有一致性。
| 注:組合模式是使用其中有個組件成員的vector或者list,然后通過Add接口添加組件到組件vector中。 |
組合模式的好處是基本對象可以組合成組合對象,而組合對象有可以被組合,這樣不斷的遞歸,可以包含層級的結構。同時,客戶端代碼中用到基本對象的地方都可以使用組合對象。
其結構如下:
其角色分為:
抽象構建角色Component:抽象角色,定義接口。
樹葉構建角色Leaf:代表參加組合的樹葉角色,樹葉沒有下級對象
樹枝構建角色Composite:參加組合的組合對象,有下級對象。
合成模式分為:透明式和安全式兩種模式
透明方式
?? 透明方式是在Component中聲明所有的結構。這樣leaf和Composite都有相同的結構,從而可以將Leaf和Coomposite同等對待。但是這個選擇的缺點是不夠安全。因為樹葉類和合成類對象本質上是不同的。樹葉節點沒有下個層次的對象的。
安全模式
?? 安全方式是Compisite中聲明用來管理子類的結構。這樣leaf中就沒有了管理子類對象的結構(Leaf確實也是沒有子類對象的)。但是該方式的缺點是不夠透明,這樣樹葉類和合成類的接口就不一致了,不能同等對待。
這兩個方式各有優缺點,需要根據具體情況作決定使用哪種方式。
?
?
| 組合模式和裝飾模式的區別: 組合模式和裝飾模式有些相似,都是層級的封裝結構。但是組合模式是解決組合對象和單個對象的層級結構問題。而裝飾模式是為了動態的給對象添加職責。而且對于安全模式的組合模式, 其葉子節點和枝節點的接口不一致。而裝飾模式的接口都是一致的。 |
轉載于:https://www.cnblogs.com/lovemdx/p/3306417.html
總結
以上是生活随笔為你收集整理的八、结构模式之组合(Composite)模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一些顿悟,和新的开始!
- 下一篇: Struts2和Struts1的不同