設計模式是人們從長期的軟體開發實戰中總結出來的一些經驗之談,為軟體領域中的開發人員提供了一種使用專家設計經驗的有效途徑,通常是多個設計模式結合使用。設計模式中運用了物件導向程式設計語言的重要特性:封裝、繼承、多型,只有通過大量的程式設計實踐才能真正領悟設計模式的精髓。在參加校招前我翻看了部分設計模式相關的書,對於每個設計模式模式,用c++寫了個小例子,加深一下理解。主要參考《大話設計模式》和《設計模式》兩本書以及借鑑其他博文的優秀部分。本文介紹觀察者模式的實現。希望對大家加深對設計模式的理解有一點幫助。
將物件組合成樹形結構以表示「部分-整體」的層次結構。c o m po s i t e 使得使用者對單個物件和組合物件的使用具有一致性。
這個例子是書上的,假設有乙個公司的組結結構如下:
它的結構很像一棵樹,其中人力資源部和財務部是沒有子結點的,具體公司才有子結點。
而且最關健的是,它的每一層結構都很相似。
**實現如下:
#include
#include
#include
usingnamespace std;
//公司類,提供介面
classcompany
virtual~company()
{}
virtualvoidadd(company*pcom)
{}
virtualvoiddisplay(intdepth)
{} protected:
stringm_name;
};
//具體公司
classconcretecompany:publiccompany
virtual~concretecompany()
{} //增加子樹或葉子
voidadd(company*pcom)
//顯示
voiddisplay(intdepth)
} private:
list
m_listcompany; }; //具體的部門,財務部 classfinancedepartment:publiccompany virtual~financedepartment() {} //只需顯示,無限新增函式,因為已是葉結點 virtualvoiddisplay(intdepth)
1. 上面公司的結構圖其實就是整體與部分的關係,而且的話整體與部分可以一致對待,因為有很多相似之處嘛。
2. 這棵樹有兩種幾能,要麼是棵葉,要麼是子棵。
其實這種模式就是組合模式。
定義:將物件組合成樹形結構以表示「部分-整體」的層次結構。組合使得使用者對單個物件和組合物件的使用具有一致性。
要注意兩點:
1. 「樹形」,必須是一種層次結構,有可以向下延伸的分枝,也有不變的樹葉。
2. "一致性",也就是要具有很多相似性。
結構圖如下:
component:主要是定義統一的介面,說白了也就是提取出相似性。
composite:定義分枝節點,也就是子樹。
leaf:定義葉節點,葉節點是沒有子節點的。
好啦,關於組合模式就介紹到這裡了,希望你已經掌握了這個模式並且可以熟練的使用它,那麼本博文的效果就達到了。如果你還覺得意猶未盡,那麼可以去看看博主的其他設計模式的介紹哦。
關於設計模式,我推薦大家看看以下部落格寫的博文,關於設計模式的講解將的特別好,我從中學習了很多,我的設計模式中的部分博文就是從這裡借鑑過來的。
關於設計模式,我推薦大家看看以下部落格寫的博文,關於設計模式的講解將的特別好,我從中學習了很多,我的設計模式中的部分博文就是從這裡借鑑過來的。
組合模式 設計模式 組合模式
1.需求分析 假設要給乙個大公司做辦公管理系統,公司有人力資源部 財務部等,然後公司在其他城市還有分公司,分公司也有自己的人力資源部 財務部等,要求總公司 分公司以及各部分成樹狀結構管理。要完成這麼乙個系統,為了有乙個更好的設計,方便開發的展開,就需要了解乙個設計模式 組合模式。2.定義 將物件組合...
設計模式 組合模式 組合模式使用
目錄 組合模式概括 組合模式使用場景 定義 將物件組合成樹形結構以表示 部分 整體 的層次結構 作用 使客戶端對單個物件和組合物件保持一致的處理方式 使用場景 1.希望客戶端可以忽略組合物件與單個物件的差異時 2.處理乙個樹形結構時 優點 清楚的定義分層次的複雜物件,表示物件的全部或部分層次 讓客戶...
設計模式 組合設計模式
組合模式 composite pattern 又稱部分整體模式,用於把一組相似的物件當做乙個單一的物件,組合模式依據樹形來組合物件,用來表示部分以及整體層次,為結構型設計模式,它建立來物件組的樹形結構。意圖 將物件組合成樹形結構以表示 部分 整體 的結構層次,組合模式使得使用者對單個物件和組合物件的...