天天看點

9、Python與設計模式--組合模式一、公司結構組織二、組合模式三、組合模式的優點和使用場景四、組合模式的缺點

每一個公司都有自己的組織結構,越是大型的企業,其組織結構就會越複雜。大多數情況下,公司喜歡用“樹形”結構來組織複雜的公司人事關系和公司間的結構關系。一般情況下,根結點代表公司的最高行政權利機關,分支節點表示一個個部門,而葉子結點則會用來代表每一個員工。每一個結點的子樹,表示該結點代表的部門所管理的機關。假設一個具有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.

組合模式也叫作部分-整體模式,其定義如下:将對象組合成樹形結構以表示“部分”和“整體”的層次結構,使得使用者對單個對象群組合對象的使用具有一緻性。

9、Python與設計模式--組合模式一、公司結構組織二、組合模式三、組合模式的優點和使用場景四、組合模式的缺點

優點:

1、節點增加和減少是非常自由和友善的,這也是樹形結構的一大特點;

2、所有節點,不管是分支節點還是葉子結點,不管是調用一個結點,還是調用一個結點群,都是非常友善的。

使用場景:

1、維護部分與整體的邏輯關系,或者動态調用整體或部分的功能接口,可以考慮使用組合模式。例如,非常多的作業系統(如linux)都把檔案系統設計成樹形結構,再比如說分布式應用中借助zookeeper,也可以組織和調用分布式叢集中的結點功能。

1、由于葉子結點和分支結點直接使用了實作類,而不友善使用抽象類,這大大限制了接口的影響範圍;若結點接口發生變更,對系統造成的風險會比較大。