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