拿大公尺時代來考慮這個問題是最合適不過的。將大公尺時代看作總公司,其他分校看成分公司,各個分公司都有自己的很多部門。。。
英文: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圖如下 乙個組織有很多子組織,而無論子組織是單獨乙個部門或是乙個分組織。該組織都希望把它們當成一樣的子組織來管理。舉個例子吧,就拿公司來說吧,乙個公司總部為了方便管理希望把分...