設計模式學習 組合模式

2021-10-09 19:22:40 字數 3646 閱讀 3750

組合模式,又叫部分整體模式,它建立了物件組的樹形結構,將物件組合成樹狀結構以表示「整體-部分」的層次關係。

組合模式依據樹形結構來組合物件,用來表示部分以及整體層次。

這種型別的設計模式屬於結構型模式。

組合模式使得使用者對單個物件和組合物件的訪問具有一致性,即:組合能夠讓客戶以一致的方式處理個別物件以及組合物件。

對原理結構圖說明即組合模式的角色及職責

component:這是組合模式中物件宣告介面,在適當情況下,實現所有類共有的介面預設行為,用於訪問和管理component子部件,component可以是抽象類或者介面

leaf:在組合中表示葉子節點,葉子節點沒有子節點

組合模式解決這樣的問題,當我們的要處理的物件可以生成一顆樹形結構,而我們要對樹上的節點和葉子進行操作時,它能夠提供一致的方式,而不用考慮它是節點還是葉子。

對應的示例圖

organizationcomponent 抽象類

public

abstract

class

organizationcomponent

protected

void

remove

(organizationcomponent organizationcomponent)

public

organizationcomponent()

public

organizationcomponent

(string name, string des)

public string getname()

public

void

setname

(string name)

public string getdes()

public

void

setdes

(string des)

//列印print

protected

abstract

void

print()

;}

university 類

//university 就是composite,可以管理college

public

class

university

extends

organizationcomponent

//重寫add

@override

protected

void

add(organizationcomponent organizationcomponent)

//重寫remove

@override

protected

void

remove

(organizationcomponent organizationcomponent)

@override

public string getname()

@override

public string getdes()

@override

protected

void

print()

}}

college 類

public

class

college

extends

organizationcomponent

//重寫add

@override

protected

void

add(organizationcomponent organizationcomponent)

//重寫remove

@override

protected

void

remove

(organizationcomponent organizationcomponent)

@override

public string getname()

@override

public string getdes()

@override

protected

void

print()

}}

department 類

public

class

department

extends

organizationcomponent

//add,remove 就不用寫了,因為它是葉子節點

@override

public string getname()

@override

public string getdes()

@override

protected

void

print()

}

測試用例

public

class

client

}

putall()這個方法使用了組合模式這一設計模式

public

class

composite

abstractmap中包含putall()方法,並且abstractmap是map的乙個實現類.但是abstractmap本身也是乙個抽象類,其抽象方法應有其子類去實現。

hashmap本身繼承了abstractmap並實現了map介面,是對組合模式中component的乙個具體子類實現。

葉子節點在**?靜態的node可以近似的看作乙個葉子節點。

簡化客戶操作,客戶端只需要面對一致的物件而不用考慮整體部分或者節點葉子的問題。

具有較強的擴充套件性,當我們要更改組合物件時,我們只需要調整內部的層次關係,客戶端不用做任何修改。

方便建立出複雜的層次結構。客戶端不用理會組合裡面的組成細節,容易新增節點或者葉子從而建立出複雜的樹形結構

需要遍歷組織結構,或者處理的物件具有樹形結構時,非常適合使用組合模式。

要求較高的抽象性,如果節點和葉子有很多差異性的話,比如很多方法和屬性都不一樣,不適合使用組合模式。

設計模式學習 組合模式

組合模式 將物件組合成樹形結構以表示 部分 整體 的層次結構,組合模式使用使用者對單個物件和組合物件的使用具有一致性 但需求中是體現部分與整體層次的結構時,以及希望使用者可以忽略組合物件與單個物件的不同,統一地使用組合結構中的所有物件時,就應該考慮用組合模式了 基本物件可以被組合成更負責的組合物件,...

組合模式 設計模式 組合模式

1.需求分析 假設要給乙個大公司做辦公管理系統,公司有人力資源部 財務部等,然後公司在其他城市還有分公司,分公司也有自己的人力資源部 財務部等,要求總公司 分公司以及各部分成樹狀結構管理。要完成這麼乙個系統,為了有乙個更好的設計,方便開發的展開,就需要了解乙個設計模式 組合模式。2.定義 將物件組合...

設計模式學習筆記 組合模式

定義 將物件組合成樹形結構以表示 部分 整體 的層次結構,使得使用者對單個物件和組合物件的使用具有一致性。組合模式主要用來處理一些具有 容器特徵 的物件,即他們在充當物件的同時,又可以作為容器包含其他的多個物件。也就是說組合模式表達的是一種樹形的結構,將資料結構中的 樹 用物件導向的方式表現出來了,...