設計模式 結構型 組合模式

2021-09-01 12:54:10 字數 2363 閱讀 5479

將物件組合成樹形結構以表示「部分-整體」的層次結構。

組合模式使得使用者對單個物件和組合物件的使用具有唯一性

對於樹形結構,當容器物件(如資料夾)的某乙個方法被呼叫時,將遍歷整個樹形結構,尋找也包含這個方法的成員物件(可以是容器物件,也可以是葉子物件)並呼叫執行,牽一而動百,其中使用了遞迴呼叫的機制來對整個結構進行處理。由於容器物件和葉子物件在功能上的區別,在使用這些物件的**中必須有區別地對待容器物件和葉子物件,而實際上大多數情況下我們希望一致地處理它們,因為對於這些物件的區別對待將會使得程式非常複雜。組合模式為解決此類問題而誕生,它可以讓葉子物件和容器物件的使用具有一致性。

組合模式定義如下:

組合模式(composite pattern):組合多個物件形成樹形結構以表示具有「整體—部分」關係的層次結構。組合模式對單個物件(即葉子物件)和組合物件(即容器物件)的使用具有一致性,組合模式又可以稱為「整體—部分」(part-whole)模式,它是一種物件結構型模式。

在組合模式中引入了抽象構件類component,它是所有容器類和葉子類的公共父類,客戶端針對component進行程式設計。組合模式結構如圖11-3所示:

圖11-3  組合模式結構圖

在組合模式結構圖中包含如下幾個角色:

● component(抽象構件):它可以是介面或抽象類,為葉子構件和容器構件物件宣告介面,在該角色中可以包含所有子類共有行為的宣告和實現。在抽象構件中定義了訪問及管理它的子構件的方法,如增加子構件、刪除子構件、獲取子構件等。

● leaf(葉子構件):它在組合結構中表示葉子節點物件,葉子節點沒有子節點,它實現了在抽象構件中定義的行為。對於那些訪問及管理子構件的方法,可以通過異常等方式進行處理。

● composite(容器構件):它在組合結構中表示容器節點物件,容器節點包含子節點,其子節點可以是葉子節點,也可以是容器節點,它提供乙個集合用於儲存子節點,實現了在抽象構件中定義的行為,包括那些訪問及管理子構件的方法,在其業務方法中可以遞迴呼叫其子節點的業務方法。

組合模式的關鍵是定義了乙個抽象構件類,它既可以代表葉子,又可以代表容器,而客戶端針對該抽象構件類進行程式設計,無須知道它到底表示的是葉子還是容器,可以對其進行統一處理。同時容器物件與抽象構件類之間還建立乙個聚合關聯關係,在容器物件中既可以包含葉子,也可以包含容器,以此實現遞迴組合,形成乙個樹形結構。

如果不使用組合模式,客戶端**將過多地依賴於容器物件複雜的內部實現結構,容器物件內部實現結構的變化將引起客戶**的頻繁變化,帶來了**維護複雜、可擴充套件性差等弊端。組合模式的引入將在一定程度上解決這些問題。

abstract class component 

public abstract void add(component c);

public abstract void remove(component c);

public abstract void display(int depth);

}class leaf extends component

@override

public void add(component c)

@override

public void remove(component c)

@override

public void display(int depth)

}class composite extends component

@override

public void add(component c)

@override

public void remove(component c)

@override

public void display(int depth)

}}public class compositepattern

}

應用場景1、想要表示物件的部分-整體層次結構。

2、想要客戶端忽略組合物件與單個物件的差異,客戶端將統一地使用組合結構中的所有物件。

關於分級資料結構的乙個普遍性的例子是你每次使用電腦時所遇到的:檔案系統

檔案系統由目錄和檔案組成。每個目錄都可以裝內容。目錄的內容可以是檔案,也 可以是目錄。

按照這種方式,計算機的檔案系統就是以遞迴結構來組織的。如果你想要描述這樣的資料結構,那麼你可以使用組合模式。

java結構型設計模式 組合模式

1 模式理解 組合模式就是把兩個物件放在乙個物件裡嘍,確切的說是乙個物件包含別的物件的集合,好比你一老闆可以有很多個員工,夠清除了吧 2 運用場景 單對多或者多對單的時候可以使用組合模式 3 示例 先建立員工物件 public class staff public string getname pu...

設計模式 結構型之組合模式

為了將具有樹形結構的特殊邏輯和通常邏輯解耦,將特殊邏輯抽離,並和通常邏輯受統一的介面約束,這樣的類結構叫組合模式 組合模式由三部分組成 統一介面 public inte ce compoisite 葉子結點 public class leaf implements compoisite overri...

設計模式 結構型模式 組合模式

傳統方案解決學校院系展示存在的問題分析 1 將學院看做是學校的子類,系是學院的子類,這樣實際上是站在組織大小來進行分層次的 2 實際上我們的要求 是 在乙個頁面中展示出學校的院系組成,乙個學校有多學院,乙個學院有多個系,因此這種方案,不能很好實現 的管理的 操作,比如對學院 系的新增,刪除,遍歷等 ...