設計模式 組合模式

2021-10-21 17:34:27 字數 1938 閱讀 2380

組合模式用於整體與部分的結構,當整體與部分有相似的結構,在操作時可以被一致對待時,就可以使用組合模式。

例如:組合模式主要包含三種角色:

如下圖,我們在訪問別的一些管理系統時,經常可以看到類似的選單。乙個選單可以包含選單項(選單項是指不再包含其他內容的選單條目),也可以包含帶有其他選單項的選單,因此使用組合模式描述選單就很恰當,我們的需求是針對乙個選單,列印出其包含的所有選單以及選單項的名稱。

要實現該案例,我們先畫出類圖:

**實現:

不管是選單還是選單項,都應該繼承自統一的介面,這裡姑且將這個統一的介面稱為選單元件。

//選單元件  不管是選單還是選單項,都應該繼承該類

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 又稱部分整體模式,用於把一組相似的物件當做乙個單一的物件,組合模式依據樹形來組合物件,用來表示部分以及整體層次,為結構型設計模式,它建立來物件組的樹形結構。意圖 將物件組合成樹形結構以表示 部分 整體 的結構層次,組合模式使得使用者對單個物件和組合物件的...