每一個公司都有自己的組織結構,越是大型的企業,其組織結構就會越複雜。大多數情況下,公司喜歡用“樹形”結構來組織複雜的公司人事關系和公司間的結構關系。一般情況下,根結點代表公司的最高行政權利機關,分支節點表示一個個部門,而葉子結點則會用來代表每一個員工。每一個結點的子樹,表示該結點代表的部門所管理的機關。假設一個具有hr部門,财務部門和研發部門,同時在全國有分支公司的總公司,其公司結構,可以表示成如下邏輯:
在該例中,公司結構抽象僅考慮公司(concretecompany)和部門(department),公司有子公司的可能性,公司也有自己的部門,部門是最終的葉子結點。
假設總公司下設東邊的分公司一個,東邊的分公司下設東北公司和東南公司,顯示公司層級,并羅列這些的公司中各部門的職責,可以建構如下業務場景:
列印如下:
-headquarter
--hq hr
--hq finance
--hq r&d
--east branch
---east.br hr
---east.br finance
---east.br r&d
---northast branch
----northeast.br hr
----northeast.br finance
----northeast.br r&d
---southeast branch
----southeast.br hr
----southeast.br finance
----southeast.br r&d
hq hr enrolling & transfering management.
hq finance finance management.
hq r&d research & development.
east.br hr enrolling & transfering management.
east.br finance finance management.
east.br r&d research & development.
northeast.br hr enrolling & transfering management.
northeast.br finance finance management.
northeast.br r&d research & development.
southeast.br hr enrolling & transfering management.
southeast.br finance finance management.
southeast.br r&d research & development.
組合模式也叫作部分-整體模式,其定義如下:将對象組合成樹形結構以表示“部分”和“整體”的層次結構,使得使用者對單個對象群組合對象的使用具有一緻性。
優點:
1、節點增加和減少是非常自由和友善的,這也是樹形結構的一大特點;
2、所有節點,不管是分支節點還是葉子結點,不管是調用一個結點,還是調用一個結點群,都是非常友善的。
使用場景:
1、維護部分與整體的邏輯關系,或者動态調用整體或部分的功能接口,可以考慮使用組合模式。例如,非常多的作業系統(如linux)都把檔案系統設計成樹形結構,再比如說分布式應用中借助zookeeper,也可以組織和調用分布式叢集中的結點功能。
1、由于葉子結點和分支結點直接使用了實作類,而不友善使用抽象類,這大大限制了接口的影響範圍;若結點接口發生變更,對系統造成的風險會比較大。