對於這個肯定會非常熟悉,上圖我們可以看做是乙個檔案系統,對於這樣的結構我們稱之為樹形結構。在樹形結構中可以通過呼叫某個方法來遍歷整個樹,當我們找到某個葉子節點後,就可以對葉子節點進行相關的操作。可以將這顆樹理解成乙個大的容器,容器裡面包含很多的成員物件,這些成員物件即可是容器物件也可以是葉子物件。但是由於容器物件和葉子物件在功能上面的區別,使得我們在使用的過程中必須要區分容器物件和葉子物件,但是這樣就會給客戶帶來不必要的麻煩,作為客戶而已,它始終希望能夠一致的對待容器物件和葉子物件。
定義:
又名部分整體模式,是用於把一組相似的物件當作乙個單一的物件。組合模式依據樹形結構來組合物件,用來表示部分以及整體層次。這種型別的設計模式屬於結構型模式,它建立了物件組的樹形結構。
組合模式主要包含三種角色:
【例】軟體選單
如下圖,我們在訪問別的一些管理系統時,經常可以看到類似的選單。乙個選單可以包含選單項(選單項是指不再包含其他內容的選單條目),也可以包含帶有其他選單項的選單,因此使用組合模式描述選單就很恰當,我們的需求是針對乙個選單,列印出其包含的所有選單以及選單項的名稱。
要實現該案例,我們先畫出類圖:
**實現:
不管是選單還是選單項,都應該繼承自統一的介面,這裡姑且將這個統一的介面稱為選單元件。
//選單元件 不管是選單還是選單項,都應該繼承該類
public abstract class menucomponent
//移除選單
public void remove(menucomponent menucomponent)
//獲取指定的子選單
public menucomponent getchild(int i)
//獲取選單名稱
public string getname()
public void print()
}
這裡的menucomponent定義為抽象類,因為有一些共有的屬性和行為要在該類中實現,menu和menuitem類就可以只覆蓋自己感興趣的方法,而不用搭理不需要或者不感興趣的方法,舉例來說,menu類可以包含子選單,因此需要覆蓋add()、remove()、getchild()方法,但是menuitem就不應該有這些方法。這裡給出的預設實現是丟擲異常,你也可以根據自己的需要改寫預設實現。
public class menu extends menucomponent
@override
public void add(menucomponent menucomponent)
@override
public void remove(menucomponent menucomponent)
@override
public menucomponent getchild(int i)
@override
public void print()
system.out.println(name);
for (menucomponent menucomponent : menucomponentlist) }}
menu類已經實現了除了getname方法的其他所有方法,因為menu類具有新增選單,移除選單和獲取子選單的功能。
public class menuitem extends menucomponent
@override
public void print()
system.out.println(name);}}
menuitem是選單項,不能再有子選單,所以新增選單,移除選單和獲取子選單的功能並不能實現。
在使用組合模式時,根據抽象構件類的定義形式,我們可將組合模式分為透明組合模式和安全組合模式兩種形式。
組合模式正是應樹形結構而生,所以組合模式的使用場景就是出現樹形結構的地方。比如:檔案目錄顯示,多級目錄呈現等樹形結構資料的操作。
組合模式 設計模式 組合模式
1.需求分析 假設要給乙個大公司做辦公管理系統,公司有人力資源部 財務部等,然後公司在其他城市還有分公司,分公司也有自己的人力資源部 財務部等,要求總公司 分公司以及各部分成樹狀結構管理。要完成這麼乙個系統,為了有乙個更好的設計,方便開發的展開,就需要了解乙個設計模式 組合模式。2.定義 將物件組合...
設計模式 組合模式 組合模式使用
目錄 組合模式概括 組合模式使用場景 定義 將物件組合成樹形結構以表示 部分 整體 的層次結構 作用 使客戶端對單個物件和組合物件保持一致的處理方式 使用場景 1.希望客戶端可以忽略組合物件與單個物件的差異時 2.處理乙個樹形結構時 優點 清楚的定義分層次的複雜物件,表示物件的全部或部分層次 讓客戶...
設計模式 組合設計模式
組合模式 composite pattern 又稱部分整體模式,用於把一組相似的物件當做乙個單一的物件,組合模式依據樹形來組合物件,用來表示部分以及整體層次,為結構型設計模式,它建立來物件組的樹形結構。意圖 將物件組合成樹形結構以表示 部分 整體 的結構層次,組合模式使得使用者對單個物件和組合物件的...