組合模式屬於結構型設計模式.
組合模式又可叫做【部分-整體】模式.它將部分與整體的關係通過樹的形式表現出來.分為安全模式與透明模式.
常規的數上會有各種枝幹樹枝與樹葉,樹幹的每乙個分叉點則理解為乙個子節點,而樹葉則認為是末節點,
將樹枝也樹葉理解為每乙個部分,所有的部分組合起來就是乙個整體.
比如城市:
- 四川省–成都市-成都
- 四川省–綿陽市-綿陽
組合模式將使單個具體的物件與整體物件具有一致性.
(一)介面要做的事
public
inte***ce safecomponent
(一)樹枝public
class
safecomposite
implements
safecomponent
@override
public
void
println(string space) }}
public
void
addchild(safecomponent safecomponent)
public
void
removechild(safecomponent safecomponent)
public
void
clear()
public string getname()
public
void
setname(string name)
public listgetsafecomponents()
public
void
setsafecomponents(listsafecomponents)
}
樹枝作為乙個節點,可向下新增刪除節點
(一)樹葉
public
class
safeleaf
implements
safecomponent
@override
public
void
println(string space)
public string getname()
public
void
setname(string name)
}
樹葉作為末節點,不能向下新增節點,只能展示或者做自己能做的事.
呼叫方式
//安全組合
safecomposite safecomponent=new safecomposite("test");
safecomposite beijing=new safecomposite("北京市");
safeleaf beijingshi=new safeleaf("北京市");
beijing.addchild(beijingshi);
safecomponent.addchild(beijing);
safecomposite sichuan=new safecomposite("四川省");
safeleaf chengdushi=new safeleaf("成都市");
safeleaf mianyangshi=new safeleaf("綿陽市");
sichuan.addchild(chengdushi);
sichuan.addchild(mianyangshi);
safecomponent.addchild(sichuan);
safecomposite guangdong=new safecomposite("廣東省");
safeleaf guangdongshi=new safeleaf("廣東市");
guangdong.addchild(guangdongshi);
safecomponent.addchild(guangdong);
safecomponent.println(" ");
顯示結果+全國城市
+北京市
-北京+四川省
-成都市
-綿陽市
+廣東省
-廣州市
在上述的顯示結果中明顯可以看出是乙個由大到小的樹枝型結構,並且在**示例中的樹枝因為可以向下新增節點,而樹葉不能新增,所以樹枝和樹葉是區分對待他們的方法也存在差異.而這種差異則保證了安全性.
但是因為樹枝與樹葉具有不同的方法,因此他們顯示的不夠透明,因此還有一種模式叫做透明組合模式,會將樹枝與樹葉透明,客戶端不必具體區分樹枝或者樹葉.
(一)抽象介面要做的事
public
abstract
class transparentcomponent
public
void
addchild(transparentcomponent component)
public
void
removechild(transparentcomponent component)
public
void
clearall()
public listgetlist()
public
abstract
void
println(string space);
public listgetcomponents()
public
void
setcomponents(listcomponents)
public string getname()
public
void
setname(string name)
}
(二)樹枝節點public
class
transparentcomposite
extends
transparentcomponent
public
void
addchild(transparentcomponent component)
public
void
removechild(transparentcomponent component)
public
void
clearall()
public listgetlist()
@override
public
void
println(string space) }}
}
(三)樹葉節點public
class
transparentleaf
extends
transparentcomponent
@override
public
void
println(string space)
}
呼叫方式//透明組合
transparentcomponent component=new transparentcomposite("全國城市");
transparentcomponent component1=new transparentcomposite("北京市");
transparentcomponent component4=new transparentleaf("北京");
component1.addchild(component4);
transparentcomponent component2=new transparentcomposite("四川省");
transparentcomponent component5=new transparentleaf("成都市");
transparentcomponent component7=new transparentleaf("綿陽市");
component2.addchild(component5);
component2.addchild(component7);
transparentcomponent component3=new transparentcomposite("廣東省");
transparentcomponent component6=new transparentleaf("廣州市");
component3.addchild(component6);
顯示結果+全國城市
+北京市
-北京+四川省
-成都市
-綿陽市
+廣東省
-廣州市
透明模式的結果與安全模式的結果如出一轍.
它使用的統一的介面,符合依賴導致原則,面向介面程式設計.而安全模式中則依賴的是具體的類的方法,違背依賴導致原則.
對於呼叫的人來說,透明模式只關心具體的介面,具體的節點是樹葉還是樹枝不關心,是乙個統一的操作.缺點
設計模式19 組合模式
將一種物件組合成樹狀層次結構的模式。1 對樹上的物件處理一致。2 可以容易在組合內加入新的物件,而不改源 1 對樹的邏輯需要樹立清楚。2 不容易使用繼承的方法增加功能。1 抽象構件 樹葉和樹枝的抽象類。2 樹葉構件 沒有子節點。3 樹枝構件 管理樹葉構件。1.抽象構件 class component...
設計模式19 組合模式
組合物件介面宣告 class component 增加或移除樹葉或樹枝的功能 virtual void add component c 0 virtual void remove component c 0 virtual void display int depth 0 protected str...
大話設計模式19 組合模式
概念 將物件組合成樹形結構以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。如 word文件中對文字的處理,即可以處理單個字又可以處理多個字 甚至是對整個文件的處理 再比如說總公司和各個分公司在職務功能都類似,但是子公司包含於總公司之中,如下圖的結構 compo...