設(shè)計(jì)模式之組合模式(結(jié)構(gòu)型)
文章目錄
模式意圖
模式定義
模式角色
模式分析
實(shí)際例子
模式應(yīng)用
模式意圖
介紹模式定義定義之前先介紹一下組合模式的意圖。其實(shí)就是將對(duì)象組合成整體-部分層次的樹形結(jié)構(gòu),客戶端調(diào)用時(shí),對(duì)于調(diào)用容器對(duì)象或者說(shuō)組合對(duì)象(“樹枝”)和單個(gè)對(duì)象(“樹葉”)是一致的。
模式定義
組合模式(Composite Pattern):組合多個(gè)對(duì)象形成樹形結(jié)構(gòu)來(lái)表示“整體-部分”的結(jié)構(gòu)層次。
組合模式又稱“整體-部分”(Part-Whole)模式,屬于對(duì)象結(jié)構(gòu)型的設(shè)計(jì)模式。將對(duì)象組合在組件類里,用于描述整體和部分的關(guān)系。組合模式對(duì)單個(gè)對(duì)象和組合對(duì)象或者說(shuō)容器對(duì)象的使用具有一致性。
模式角色
組合模式包括如下角色:
Component:抽象構(gòu)件
Leaf:葉子構(gòu)件
Composite:容器構(gòu)件
Client:客戶類
模式分析
組合模式定義一個(gè)抽象的構(gòu)件類,主要用于被客戶端調(diào)用,客戶調(diào)調(diào)用時(shí)就不需要關(guān)心是單個(gè)對(duì)象還是容器對(duì)象了。
容器對(duì)象和抽象構(gòu)件類是一種聚合關(guān)系,容器對(duì)象里即可以包含葉子,也可以包含容器,遞歸組合,從而形成一個(gè)樹形結(jié)構(gòu)。
實(shí)際例子
例子來(lái)自:《設(shè)計(jì)模式》一書
抽象構(gòu)件類:
public abstract class Component { public abstract void add(Component c); public abstract void remove(Component c); public abstract Component getChild(int i); public abstract void operation(); }
1
2
3
4
5
6
7
8
葉子類:
public class Leaf extends Component { public void add(Component c) { //異常處理或錯(cuò)誤提示 } public void remove(Component c) { //異常處理或錯(cuò)誤提示 } public Component getChild(int i) { //異常處理或錯(cuò)誤提示 } public void operation() { //實(shí)現(xiàn)代碼 } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
容器類:
public class Composite extends Component { private ArrayList list = new ArrayList(); public void add(Component c) { list.add(c); } public void remove(Component c) { list.remove(c); } public Component getChild(int i) { (Component)list.get(i); } public void operation() { for(Object obj:list) { ((Component)obj).operation(); } } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
模式應(yīng)用
組合模式應(yīng)用
XML文檔解析
JDK的AWT/Swing
…
容器
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。