設計模式之組合模式,溫故而知新。

2022-02-10 10:49:17 字數 3307 閱讀 6312

概述:

組合模式有時候又叫做部分-整體模式,它使我們樹型結構的問題中,模糊了簡單元素和複雜元素的概念,客戶程式可以向處理簡單元素一樣來處理複雜元素,從而使得客戶程式與複雜元素的內部結構解耦。

將物件組合成樹形結構以表示「部分-整體」的層次結構。composite模式使得使用者對單個物件和組合物件的使用具有一致性。[gof 《設計模式》]

結構圖:

舉例:

假設我們公司有做個打卡的程式,能滿足各種打卡的需要,比如整個公司能打卡,個人也能打卡(外包人員乙個人支起一片天)。我們看看用組合模式是怎麼實現的,這裡不就講怎麼演化的了!演化的過程比較容易誤導。12

3456

78910

1112

1314

1516

1718

1920

2122

2324

2526

2728

2930

3132

3334

3536

3738

3940

4142

4344

4546

4748

4950

5152

5354

5556

5758

5960

6162

6364

6566

6768

6970

publicabstractclasscompany

set

}

//新增公司

publicabstractvoidadd(company name);

//移除公司

publicabstractvoidremove(company name);

//打卡

publicabstractvoidregister();

}

//個人

publicclasspersonal : company

publicoverridevoidadd(company name)

publicoverridevoidremove(company name)

//打卡

publicoverridevoidregister()

打卡了",_name);

}

}

//乙個公司

publicclasswholecompany : company

publicoverridevoidremove(company name)

publicoverridevoidregister()

", companyname);

foreach(var iteminmylist)

}

}

我們看看 客戶端怎麼呼叫:12

3456

78910

1112

1314

1516

1718

1920

2122

2324

25classprogram

}

寫到這裡我們會發現,設計模式大多數都可以通用,同一種業務可以用很多種設計模式來做,但是只要我們弄清楚適用場景,就能選出乙個更合適我們需求的設計模式。

以下情況下適用composite模式:

1.你想表示物件的部分-整體層次結構

2.你希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。

設計模式系列文章入口

溫故而知新

堆排 建立堆,維護堆的屬性 一次拿掉乙個,然後維護屬性,二分的結構 使得維護屬性只要logn的時間 冒泡也是一次拿走乙個 但是線性的結構 每次沒有節省時間 快排 一次確定 乙個值的位置,然後二分,縮小問題的範圍。floyd找最短 一次更新 將狀態改為經過固定點的 最短距離 迴圈 遍歷每個點,則結果為...

溫故而知新 設計模式之Builder

builder模式主要用於以下場景 需要建立乙個較複雜的大物件例項,並且構成該物件的子物件可能經常會發生變化,但是組成大物件的演算法卻相對穩定。比如 我們做b s開發時,經常會遇到一些系統要求支援模板 切換,乙個完整的頁面由若干子模組組成,不管模板如何變換,子模組的內容 位置如何變化,但組成頁面的演...

溫故而知新之素數

明明是小學生的知識點,可是現在看來卻把我完全整懵了。o o 糾結了幾天,正好碰到老師講類似的例題。如何判斷數m為素數,素數也是質數,只能被1和m整除。即不存在m i,t 1,使得m i t,如果用數學方法的話,那麼範圍可以縮小,令k m,i的範圍可以縮小到2 k,演算法如下 依次用2 k之間的整數整...