例如:組合模式主要包含三種角色:
如下圖,我們在訪問別的一些管理系統時,經常可以看到類似的選單。乙個選單可以包含選單項(選單項是指不再包含其他內容的選單條目),也可以包含帶有其他選單項的選單,因此使用組合模式描述選單就很恰當,我們的需求是針對乙個選單,列印出其包含的所有選單以及選單項的名稱。要實現該案例,我們先畫出類圖:
**實現:
不管是選單還是選單項,都應該繼承自統一的介面,這裡姑且將這個統一的介面稱為選單元件。
//選單元件 不管是選單還是選單項,都應該繼承該類
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就不應該有這些方法。這裡給出的預設實現是丟擲異常,你也可以根據自己的需要改寫預設實現。
ublic 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 又稱部分整體模式,用於把一組相似的物件當做乙個單一的物件,組合模式依據樹形來組合物件,用來表示部分以及整體層次,為結構型設計模式,它建立來物件組的樹形結構。意圖 將物件組合成樹形結構以表示 部分 整體 的結構層次,組合模式使得使用者對單個物件和組合物件的...