(十五)組合模式

2021-07-10 07:02:00 字數 1709 閱讀 2644



定義:組合模式(composite),將物件組合成樹形結構以表示「部分-整體」的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。【dp】

uml類圖:

原始碼實現:

// composite.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include #include #include using namespace std;

//composite介面的抽象類

class component

virtual void add(component *c) = 0;

virtual void remove(component *c) = 0;

virtual void display(int d) = 0;

};//帶有子節點的節點

class composite : public component

void add(component *c)

void remove(component *c)

//列印節點名及子節點名

void display(int d)

cout << name << endl;

auto it = children.cbegin();

for (; it != children.cend(); ++it)

}};//葉子節點

class leaf : public component

void add(component *c)

void remove(component *c)

void display(int d)

cout << name << endl;

}};int _tmain(int argc, _tchar* argv)

輸出:

為了更直觀一些,上面實現了這樣一套類結構:

可見就是通過這個設計模式構造了乙個樹形結構,很形象就稱作組合模式啦。。。

使用場景和優勢:

1.需求中是體現部分與整體層次的結構時,希望使用者可以忽略組合物件與單個物件的不同,統一地使用組合結構中的所有物件時,就應該考慮使用組合模式了。

上點的關鍵就是,統一地使用,這就是面向結構程式設計,像組合模式**中的composite和leaf類一樣,composite包含多個物件,leaf只是單個物件,但我們在外面可以統一呼叫display,add,remove介面,也許有人會問,leaf物件不能在增加和刪除了,但是我們採用輸出異常資訊的方法,這樣保持了介面的一致性,這被稱作「透明方式」。

優勢:組合模式的基本物件可以被組合成更複雜的組合物件,而這個組合物件又可以被組合,這樣不斷地遞迴下去,客戶**中,任何用到基本物件的地方都可以使用組合物件了;

使用者是不用關心到底是處理乙個葉節點還是處理乙個組合元件,也就用不著為定義組合而寫一些選擇判斷語句了。

總之,就是為了讓客戶可以一致地使用組合結構和單個物件。

十五 組合模式

組合模式 composite 將物件組合成樹形結構以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。ifndef composite h define composite h include include include using namespace std...

組合模式 設計模式 組合模式

1.需求分析 假設要給乙個大公司做辦公管理系統,公司有人力資源部 財務部等,然後公司在其他城市還有分公司,分公司也有自己的人力資源部 財務部等,要求總公司 分公司以及各部分成樹狀結構管理。要完成這麼乙個系統,為了有乙個更好的設計,方便開發的展開,就需要了解乙個設計模式 組合模式。2.定義 將物件組合...

設計模式 組合模式 組合模式使用

目錄 組合模式概括 組合模式使用場景 定義 將物件組合成樹形結構以表示 部分 整體 的層次結構 作用 使客戶端對單個物件和組合物件保持一致的處理方式 使用場景 1.希望客戶端可以忽略組合物件與單個物件的差異時 2.處理乙個樹形結構時 優點 清楚的定義分層次的複雜物件,表示物件的全部或部分層次 讓客戶...