一起學設計模式 組合模式

2021-08-14 12:58:06 字數 2728 閱讀 2679

組合模式(composite pattern)屬於結構型模式的一種,組合多個物件形成樹形結構來表示部分 - 整體的結構層次,對單個物件(葉子物件)和組合物件(容器物件)的使用具有一致性

組合模式對單個物件(葉子物件)和組合物件(容器物件)具有一致性,它將物件組織到樹結構中,可以用來描述整體與部分的關係。同時它也模糊了簡單元素(葉子物件)和複雜元素(容器物件)的概念,使得客戶能夠像處理簡單元素一樣來處理複雜元素,從而使客戶程式能夠與複雜元素的內部結構解耦。

組合模式的uml圖

組成部分

在乙個公司中,有5名員工。最高的職位是1名總經理。總經理下,有兩名員工,一名是經理,另一名是開發人員,另外一名經理有兩名開發人員在他下面工作。所有員工的名字和薪水從上到下。

樹結構例如:

透明方式uml:

建立employee(組合物件)的介面檔案,含基本操作

public

inte***ce

employee

建立developer(葉子節點),所有訪問子項相關的所有操作都將為空,因為它沒有子項,但透明方式的緣故,即使用不上也需定義空實現

public

class

developer

implements

employee

@override

public

void

add(employee employee)

@override

public

void

remove(employee employee)

@override

public

void

print()

}

建立manager(容器物件),具有訪問和修改子物件的方法。

public

class

manager

implements

employee

private listemployees = new arraylist<>();

@override

public

void

add(employee employee)

@override

public

void

remove(employee employee)

@override

public

void

print() }}

client測試類

public

class

client

}

執行結果

-------------

name = 總經理 - 覃飛 salary = 50000.0

-------------

-------------

name = 員工 - 小唐 salary = 20000.0

-------------

-------------

name = 經理 - 邱東 salary = 25000.0

-------------

-------------

name = 員工 - 小李 salary = 10000.0

-------------

-------------

name = 員工 - 小王 salary = 15000.0

-------------

安全方式uml:

只保留公共部分,component(組合物件)中不去申明add/remove等方法,這樣leaf(葉子物件)就不用去實現它了,而是在composite中申明所有管理子類物件的方法,但由於這樣做不夠透明,相對安全

public

inte***ce

employee

優點

缺點

適用場景

參考文獻:

全文**:

battcn開源群(適合新手):391619659

一起學設計模式 外觀模式

外觀模式 facade pattern 屬於結構型模式的一種,為子系統中的一組介面提供乙個統一的入口,它通過引入乙個外觀角色來簡化客戶端與子系統之間的互動.外觀模式是一種使用頻率非常高的結構型設計模式,當你要為乙個複雜子系統提供乙個簡單介面時。子系統往往因為不斷演化而變得越來越複雜。大多數模式使用時...

一起學設計模式 建造者模式

建造者模式 builder pattern 屬於建立型模式的一種,將多個簡單物件構建成乙個複雜的物件,構建過程抽象化,不同實現方法可以構造出不同表現 屬性 的物件,還提供了一種更加優雅構建物件的方式 有時候構建乙個複雜的物件,需要經過好幾步的處理,比如常用的stringbuffer stringbu...

一起學設計模式 02 工廠模式

如果你還沒了解六大軟體設計原則的話,建議先谷歌下,再來學習設計模式。這對理解設計模式和記憶設計模式的經典寫法都會有很大幫助。學習設計模式,光是記寫法沒有意義,要學習的是設計思想,為什麼要這麼做,這麼做的好處是什麼。懷著這兩個問題來學習設計模式,你會發現六大軟體設計原則在設計模式中的應用,相應的也會加...