組合模式(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
}
安全方式uml:-------------
name = 總經理 - 覃飛 salary = 50000.0
-------------
-------------
name = 員工 - 小唐 salary = 20000.0
-------------
-------------
name = 經理 - 邱東 salary = 25000.0
-------------
-------------
name = 員工 - 小李 salary = 10000.0
-------------
-------------
name = 員工 - 小王 salary = 15000.0
-------------
只保留公共部分,
component(組合物件)
中不去申明add/remove
等方法,這樣leaf(葉子物件)
就不用去實現它了,而是在composite
中申明所有管理子類物件
的方法,但由於這樣做不夠透明,相對安全public
inte***ce
employee
優點缺點適用場景參考文獻:全文**:
battcn開源群(適合新手):391619659
一起學設計模式 外觀模式
外觀模式 facade pattern 屬於結構型模式的一種,為子系統中的一組介面提供乙個統一的入口,它通過引入乙個外觀角色來簡化客戶端與子系統之間的互動.外觀模式是一種使用頻率非常高的結構型設計模式,當你要為乙個複雜子系統提供乙個簡單介面時。子系統往往因為不斷演化而變得越來越複雜。大多數模式使用時...
一起學設計模式 建造者模式
建造者模式 builder pattern 屬於建立型模式的一種,將多個簡單物件構建成乙個複雜的物件,構建過程抽象化,不同實現方法可以構造出不同表現 屬性 的物件,還提供了一種更加優雅構建物件的方式 有時候構建乙個複雜的物件,需要經過好幾步的處理,比如常用的stringbuffer stringbu...
一起學設計模式 02 工廠模式
如果你還沒了解六大軟體設計原則的話,建議先谷歌下,再來學習設計模式。這對理解設計模式和記憶設計模式的經典寫法都會有很大幫助。學習設計模式,光是記寫法沒有意義,要學習的是設計思想,為什麼要這麼做,這麼做的好處是什麼。懷著這兩個問題來學習設計模式,你會發現六大軟體設計原則在設計模式中的應用,相應的也會加...