Android設計模式之(19) 組合模式

2021-08-07 17:48:47 字數 4729 閱讀 8477

組合模式屬於結構型設計模式.

組合模式又可叫做【部分-整體】模式.它將部分與整體的關係通過樹的形式表現出來.分為安全模式透明模式.

常規的數上會有各種枝幹樹枝與樹葉,樹幹的每乙個分叉點則理解為乙個子節點,而樹葉則認為是末節點,

將樹枝也樹葉理解為每乙個部分,所有的部分組合起來就是乙個整體.

比如城市:

- 四川省–成都市-成都

- 四川省–綿陽市-綿陽

組合模式將使單個具體的物件與整體物件具有一致性.

(一)介面要做的事

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