java設計模式之組合模式

2021-07-29 13:33:29 字數 1902 閱讀 6978

一、組合模式簡介

組合模式:將物件組合成樹形結構以表示「部分-整體」的層次結構。composite使得使用者對單個物件和組合物件的使用具有一致性。有時候又叫做部分-整體模式,它使我們樹型結構的問題中,模糊了簡單元素和複雜元素的概念,客戶程式可以向處理簡單元素一樣來處理複雜元素,從而使得客戶程式與複雜元素的內部結構解耦。

組合模式讓我們可以優化處理遞迴或分級資料結構。有許多關於分級資料結構的例子,使得組合模式非常有用武之地。關於分級資料結構的乙個普遍性的例子是你每次使用電腦時所遇到的:檔案系統。檔案系統由目錄和檔案組成。每個目錄都可以裝內容。目錄的內容可以是檔案,也可以是目錄。按照這種方式,計算機的檔案系統就是以遞迴結構來組織的。如果你想要描述這樣的資料結構,那麼你可以使用組合模式composite。

組合模式涉及角色:

1、component:是組合中的物件宣告介面,在適當的情況下,實現所有類共有介面的預設行為。宣告乙個介面用於訪問和管理component子部件。

2、leaf:在組合中表示葉子結點物件,葉子結點沒有子結點。

3、composite:定義有枝節點行為,用來儲存子部件,在component介面中實現與子部件有關操作,如增加(add)和刪除(remove)等。

使用場景:

1、表示物件的部分-整體層次結構(樹形結構)如樹形選單,檔案、資料夾的管理。 

2、使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。

二、示例演示

1、業務需求

這裡用組合模式來完成乙個樹狀結構的組成

--根節點

----子節點child

-------child之子節點一

-------child之子節點二

----子節點child2

2、編寫component抽象類

abstract class component 

public abstract void add(component c);

public abstract void remove(component c);

public abstract void foreach();

}

3、編寫composite枝節點

class composite extends component

@override

public void add(component c)

@override

public void foreach()

}@override

public void remove(component c)

}

4、編寫leaf類,注意leaf不包含子節點。

class leaf extends component

@override

public void add(component c)

@override

public void foreach()

@override

public void remove(component c)

5、測試

public static void main(string args)

結果如下:

節點名:

一級子節點child

tself name-->一級子節點child的子節點一

tself name-->一級子節點child的子節點二

節點名:

一級子節點child2

三、總結

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

java設計模式之組合模式

組合模式 允許你將物件組合成樹形結構來表現 整體 部分 層次結構。組合能讓客戶以一致的方式處理個別物件以及物件組合。組合模式類圖 client 客戶使用component介面操作組合中的物件。component component為組合中的所有物件定義乙個介面,不管是組合還是節點,component...

《Java設計模式之組合模式》

組合模式 將物件組合成樹形結構以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。新增節點 public abstract void add component c 刪除節點 public abstract void remove component c 顯示節點...

Java設計模式之組合模式

介紹 我們的計算機都擁有檔案系統,資料夾裡面既可以放入檔案,也可以放入子資料夾。在子資料夾中,一樣地既可以放入檔案,也可以放入子資料夾。檔案系統是一種容器結構 遞迴結構。組合模式就是用於創造出這樣的結構的模式。組合模式又叫部分整體模式,用於把一組相似的物件當做乙個單一的物件,它將物件組合成樹形結構以...