設計模式之組合模式

2022-09-08 13:36:11 字數 1739 閱讀 1107

將物件組合成樹形結構以表示部分整體的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。

package

com.hml.combination;

public

abstract

class

component

public

void

setname(string name)

public

component(string name)

public

abstract

void

add(component c);

public

abstract

void

remove(component c);

public

abstract

void display(int

depth);

}

package

com.hml.combination;

import

j**a.util.arraylist;

import

j**a.util.list;

public

class composite extends

component

@override

public

void

add(component c)

@override

public

void

remove(component c)

@override

public

void display(int

depth)

}}

package

com.hml.combination;

public

class leaf extends

component

@override

public

void

add(component c)

@override

public

void

remove(component c)

@override

public

void display(int

depth)

}

package

com.hml.combination;

public

class

test

}

leaf中有add和remove方法,這種方式叫做透明方式,也就是說在component中宣告所有用來管理子物件的方法,其中包含add和remove等。這樣實component介面的所有子類都具備了add和remove。這樣的好處是葉子節點和枝節點對於外界沒有區別,他們具備完全一致的行為介面。但是問題是實現格外的add和remove沒有任何意義。安全方式,也就是component介面中不宣告add和remove方法,那麼子類leaf也就不需要實現它們,而在composite宣告所有用來管理子類物件的方法,這樣做就不會出現剛才提到的問題,不過由於不夠透明,所以樹葉和樹枝類將不具有相同的介面,客戶端的呼叫需要做相應的判斷,帶來了不便。

當需求中是體現部分與整體層次結構時,以及希望客戶可以忽略組合物件與單個物件的不同,統一的使用組合結構中的所有物件時,就應該考慮用組合模式。

設計模式之組合模式

組合模式 以 整體 部分 的層次結構,將物件以樹型結構組合起來。如下圖所示 組合模式首先得定義乙個用來管理和訪問部件們的抽象類。public abstract class equipment 再建立乙個組合體的部件 class element equipment 現在我們再來定義乙個組合體,也就是組...

設計模式之 組合模式

有時候我們需要維護一些物件,這些物件具有一定的層次結構,它們之間雖然差異很大,但在使用的時候我們希望能構一致的對待,比如windows控制項,繪圖中的圖形等,這個時候我們就可以採用組合模式來進行管理。組合模式就是將要管理的物件按樹型結構來進行組織,表示成一種 整體 部分 的層次結構,使得使用者對單個...

設計模式之組合模式

組合模式 將物件組合成樹形結構以表示 部分 整體 的層次結構。使得使用者對單個物件和組合物件的使用具有一致性。適用性 想表示物件的部分 整體層次結構,希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。典型表示結構圖 宣告組合中的物件宣告介面 在適當的情況下,實現所有類共...