2017 01 02 學習日記 組合模式

2021-07-25 18:44:54 字數 1928 閱讀 8032

考試臨近,越來越大的焦慮感!.!@今天學習的是組合模式

組合模式(composite pattern)

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

有時候又叫做部分-整體模式,它使我們樹型結構的問題中,模糊了簡單元素和複雜元素的概念,客戶程式可以像處理簡單元素一樣來處理複雜元素,從而使得客戶程式與複雜元素的內部結構解耦。

角色:

component: 是組合中的物件宣告介面,在適當的情況下,實現所有類共有介面的預設行為。宣告乙個介面用於訪問和管理component子部件。

leaf :在組合中表示葉子結點物件,葉子結點沒有子結點。

composite: 定義有枝節點行為,用來儲存子部件,在component介面中實現與子部件有關操作,如增加(add)和刪除(remove)等。

類圖:

例項**(大話設計模式一書中公司管理系統):

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

public override void add(company c)

public override void remove(company c)

public override void display(int depth)

public override void lineofduty()

公司財務收支管理", name);}}

class program

}

優點:

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

簡化客戶** 客戶可以一致地使用組合結構和單個物件。通常使用者不知道 (也不關心)處理的是乙個葉節點還是乙個組合元件。這就簡化了客戶** , 因為在定義組合的那些類中不需要寫一些充斥著選擇語句的函式。

使得更容易增加新型別的元件 新定義的composite或leaf子類自動地與已有的結構和客戶**一起工作,客戶程式不需因新的component類而改變。

使你的設計變得更加一般化 容易增加新元件也會產生一些問題,那就是很難限制組合中的元件。有時你希望乙個組合只能有某些特定的元件。使用composite時,你不能依賴型別系統施加這些約束,而必須在執行時刻進行檢查。

組合數取模

複習了一下組合數取模,當然推薦檢視acdreamer的部落格啦,寫的確實好啦,自己把裡面的題目全a掉了。include include include include include include include using namespace std typedef long long ll l...

組合數取模

對於c n,m mod p。這裡的n,m,p p為素數 都很大的情況。就不能再用c n,m c n 1,m c n 1,m 1 的公式遞推了。這裡用到lusac定理 for non negative integers m and n and a prime p,the following congr...

組合數取模

組合數c m,n 表示在m個不同的元素中取出n個元素 不要求有序 產生的方案數。定義式 c m,n m n m n 並不會使用latex qaq 根據題目中對組合數的需要,有不同的計算方法。運用乙個數學上的組合恒等式 oi中稱之為楊輝三角 c m,n c m 1,n 1 c m 1,n 證明 1.直...