C 設計模式 組合模式

2021-09-25 19:23:14 字數 2368 閱讀 3199

目錄

基本概念

**與例項

個人感覺qt的物件樹就是運用了這種設計模式!!!

當然,只是個人感覺,本人並沒有研究qt的原始碼

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

何時使用:需求中提現部分和整體的層次結構,開發者希望使用者忽略組合物件與單個物件的不同,統一使用組合結構中的所有物件時,就應該考慮組合模式了!

組合模式讓客戶可以一致使用組合結構的單個物件。

uml圖如下(此圖來至於 大話設計模式):

程式執行截圖如下:

**如下:

head.h

#ifndef head_h

#define head_h

#include #include #include using namespace std;

//公司類 介面

class company;

//具體公司類,實現介面

class concretecompany: public company;

//人力資源部結點

class hrdepartment: public company;

//財務部結點

class financedepartment: public company;

#endif //head_h

head.cpp

#include "head.h"

company::company(const string &name)

company::~company()

void company::add(company *c)

void company::remove(company *c)

void company::display(int depath)

void company::lineofduty()

concretecompany::concretecompany(const string &name) : company(name)

concretecompany::~concretecompany()

}void concretecompany::add(company *c)

void concretecompany::remove(company *c)

void concretecompany::display(int depath)

cout << m_name << endl;

for(list::iterator it = m_children.begin(); it != m_children.end(); it++)

}void concretecompany::lineofduty()

}hrdepartment::hrdepartment(const string &name) : company(name)

hrdepartment::~hrdepartment()

void hrdepartment::add(company *c)

void hrdepartment::remove(company *c)

void hrdepartment::display(int depath)

cout << m_name << endl;

}void hrdepartment::lineofduty()

financedepartment::financedepartment(const string &name) : company(name)

financedepartment::~financedepartment()

void financedepartment::add(company *c)

void financedepartment::remove(company *c)

void financedepartment::display(int depath)

cout << m_name << endl;

}void financedepartment::lineofduty()

main.cpp

#include "head.h"

int main(int *argc, int *ar**)

C 設計模式 組合模式

一.概述 組合模式,將物件組合成樹形結構以表示 部分 整體 的層次結構,組合模式使得使用者對單個物件和組合物件的使用具有一致性。結構 1.component 是組合中的物件宣告介面,在適當的情況下,實現所有類共有介面的預設行為。宣告乙個介面用於訪問和管理component子部件。2.leaf 在組合...

C 設計模式 組合模式

一 組合模式的定義 組合多個物件形成樹形結構以表示具有部分 整體關係的層次結構。二 說明 組合模式關注那些包含葉子構件和容器構件的結構以及它們的組織形式,在葉子結構中不包含成員物件,而容器構件中包含成員物件,這些物件通過遞迴組合可構成乙個樹形結構。由於容器物件和葉子物件在功能上存在區別,因此在使用這...

C 設計模式 組合模式

ifndef composite h define composite h include include include 說明 組合模式的關鍵是定義了乙個抽象構件類,它既可以代表葉子,又可以代表容器,而客戶端針對該抽象構件類進行程式設計,無須知道它到底表示的是葉子還是容器,可以對其進行統一處理。同...