C 設計模式之組合模式

2021-08-20 12:06:31 字數 2629 閱讀 1161

拿大公尺時代來考慮這個問題是最合適不過的。將大公尺時代看作總公司,其他分校看成分公司,各個分公司都有自己的很多部門。。。

英文:composite

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

拿咱們處在的大公尺時代舉例子。大公尺時代有計算機和英語,計算機又分為學術部門,紀律部門,安全部門等,這就可以使用組合模式。

公司類(抽象類,或介面)

具體公司類(大公尺時代→實現介面,樹枝節點)

各個部門類(樹葉節點)

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

定義了包含基本物件和分公司等組合物件的類層次結構。基本物件可以被組合成更複雜的組合物件,而這個組合物件又可以被組合,這樣不斷的遞迴下去,客戶**中,任何用到基本物件的地方都可以使用組合物件了。

組合模式可以讓客戶可以一致的使用組合結構和單個物件。(也就是說,乙個公司設多少個分公司都沒問題)

1 不實現繼承的抽象成員remove

2 解決:

首先,這裡提到了remove,所以檢查方法有沒有錯誤

沒有錯誤之後看一下是否繼承了方法。看了**之後清楚了原來是繼承了其他三個,由於粗心,將remove遺漏了,所以新增上**:

public

override

void

remove(company hengshui)

3 分支不顯示:

4 解決

錯誤**:

comp.add(comp);//將分支誤寫成了定義的分校變數
正確**:

root.add(comp);  //分支
抽象公司類:(抽象類或介面)

//抽象公司類

abstract class company

public

abstract

void

add(company c);//增加

public

abstract

void

remove(company c);//移除

public

abstract

void

display(int depth);//顯示

public

abstract

void

lineofduty();//履行職責,這個方法使得不同部門履行不同職責

}

具體公司類:(樹枝節點)

class concretecompany:company

//增加

public

override

void

add(company c)

public

override

void

remove(company c)

//重寫顯示

public

override

void

display(int depth)

}//重寫履行職責

public

override

void

lineofduty()}}

部門類(樹葉節點)

//具體人力資源部門

class hrdepartment:company

public

override

void

add(company c)

public

override

void

remove(company c)

public

override

void

display(int depth)

public

override

void

lineofduty()

員工招聘培訓管理",name);}}

//財務部,**同上↑

class financedepartment : company

客戶端**:

static

void main(string args)

}

最後效果圖示:

也在這裡預祝大公尺時代能夠帶更多的人走向乙個全新的教育模式~

C 設計模式之組合模式

組合模式,將物件組合成樹形結構以表示 部分 整體 的層次結構,組合模式使得使用者對單個物件和組合物件的使用具有一致性。在自然界中常常存在著許多樹形關係,例如公司的結構,有子公司,部門。又如檔案系統的結構,目錄下邊有目錄或者檔案,而目錄下的目錄又有目錄和檔案,如此遞迴下去。而組合模式就是為了處理這種樹...

c 設計模式之組合模式

組合模式的結構圖 兌現 include include include list using namespace std class ifile class file public ifile virtual void display private string m name 目錄節點 class...

設計模式之組合模式(C )

組合模式,將物件組合成屬性結構以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。其uml圖如下 乙個組織有很多子組織,而無論子組織是單獨乙個部門或是乙個分組織。該組織都希望把它們當成一樣的子組織來管理。舉個例子吧,就拿公司來說吧,乙個公司總部為了方便管理希望把分...