設計模式(九) 組合模式

2021-10-07 23:58:44 字數 2446 閱讀 9524

一、組合模式介紹

組合模式基本介紹

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

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

3)這種型別的設計模式屬於結構型模式;

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

組合模式的原理類圖

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

組合模式解決的問題

組合模式的注意事項和細節

二、應用

1、組合模式應用例項

編寫程式展示乙個學校院系結構:需求是這樣,要在乙個頁面中展示出學校的院系組成,乙個學校有多個學院,乙個學院有多個系。

2、類圖

1)component類

public

abstract

class

organizationcomponent

protected

void

remove

(organizationcomponent 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()

;}

2)composite類

public

class

university

extends

organizationcomponent

//重寫add

@override

protected

void

add(organizationcomponent organizationcomponent)

//重寫remove

@override

protected

void

remove

(organizationcomponent organizationcomponent)

//print方法,就是輸出university,包含的學院

protected

void

print()

}}

public

class

college

extends

organizationcomponent

//重寫add

@override

protected

void

add(organizationcomponent organizationcomponent)

//重寫remove

@override

protected

void

remove

(organizationcomponent organizationcomponent)

//print方法,就是輸出university,包含的學院

protected

void

print()

}}

3)leaf類

public

class

department

extends

organizationcomponent

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

@override

public string getname()

@override

public string getdes()

protected

void

print()

}

4)client類

public

class

client

}

設計模式8 組合模式

組合模式首先想到的就是樹形結構,比如我們常用的檔案結構,請看windows的檔案結構 無論是檔案或者是資料夾,常用操作都是一致的,比如 複製 貼上 剪下 刪除 所佔空間大小。我們並沒有刻意的去分他是資料夾還是檔案。我們可以把資料夾看成是組合物件,把每乙個檔案看成是單個物件。組合模式模糊了這兩個概念,...

《設計模式12 組合模式

組合模式其實是乙個很形象的模式。它也被稱為部分整體模式。組合模式的結構就如同樹狀圖一樣。而樹就是枝幹 葉子的組合,組合模式可以形象的這麼理解。其實資料夾是乙個很好的組合模式的體現。乙個資料夾 樹根root 下可能有多個資料夾 枝幹trunk 可能是單個的檔案 樹葉leaf 而枝幹是可以繼續向下延伸的...

設計模式11 組合模式

組合模式有時又叫部分 整體模式在處理類似樹形結構的問題時比較方便 分支類public class treenode public string getname public void setname string name public treenode getparent public void ...