一.概述:組合模式,將物件組合成樹形結構以表示「部分-整體」的層次結構,組合模式使得使用者對單個物件和組合物件的使用具有一致性。
結構:
1.component 是組合中的物件宣告介面,在適當的情況下,實現所有類共有介面的預設行為。宣告乙個介面用於訪問和管理component子部件。
2.leaf 在組合中表示葉子結點物件,葉子結點沒有子結點。
3.composite 定義有枝節點行為,用來儲存子部件,在component介面中實現與子部件有關操作,如增加(add)和刪除(remove)等。
三.實現**:通過生活中畫圖形的案例,複雜圖形的畫法來自但個圖形的組合。
/// /// 圖形抽象類
///
public abstract class graphics
public graphics(string name)
public abstract void draw();
public abstract void add(graphics g);
public abstract void remove(graphics g);
}
/// /// 單一圖形線段
///
public class line:graphics
public override void draw()
public override void add(graphics g)
public override void remove(graphics g)
}
/// /// 單一圖形圓
///
public class circle:graphics
public override void draw()
public override void add(graphics g)
public override void remove(graphics g)
}
/// /// 複雜圖形,由簡單圖形組合而成
///
public class complexgraphics:graphics
public override void draw()
}public override void add(graphics g)
public override void remove(graphics g)
}
/// /// c#設計模式組合模式-透明式的組合模式
上面的方式使用的是透明組合描述,複雜圖形和簡單圖形都繼承自graphish抽象類,實現了裡面的方法,而簡單圖形是不需要add和remove方法的,使用透明組合模式,只能夠是直接通過丟擲乙個異常的方式來解決這樣的問題的,其實可以使用安全式的組合模式來避免上訴問題,graphish只抽象畫的方法,後面的簡單圖形繼承,實現畫的方法,而複雜圖形繼承後,實現畫的方方,同時新增add和remove方法,這樣簡單圖形中就不用採取丟擲異常的方式解決問題。修改後關係圖如下:
涉及角色:
1.component 是組合中的物件宣告介面,在適當的情況下,實現所有類共有介面的預設行為。宣告乙個介面用於訪問和管理component子部件。
2.leaf 在組合中表示葉子結點物件,葉子結點沒有子結點。
3.composite 定義有枝節點行為,用來儲存子部件,在component介面中實現與子部件有關操作,如增加(add)和刪除(remove)等。
適用性1.想表示物件的部分-整體層次結構
2.希望使用者忽略組合物件與單個物件的不同,使用者將統一地使用組合結構中的所有物件。
C 設計模式 組合模式
一 組合模式的定義 組合多個物件形成樹形結構以表示具有部分 整體關係的層次結構。二 說明 組合模式關注那些包含葉子構件和容器構件的結構以及它們的組織形式,在葉子結構中不包含成員物件,而容器構件中包含成員物件,這些物件通過遞迴組合可構成乙個樹形結構。由於容器物件和葉子物件在功能上存在區別,因此在使用這...
C 設計模式 組合模式
ifndef composite h define composite h include include include 說明 組合模式的關鍵是定義了乙個抽象構件類,它既可以代表葉子,又可以代表容器,而客戶端針對該抽象構件類進行程式設計,無須知道它到底表示的是葉子還是容器,可以對其進行統一處理。同...
C 設計模式 組合模式
目錄 基本概念 與例項 個人感覺qt的物件樹就是運用了這種設計模式!當然,只是個人感覺,本人並沒有研究qt的原始碼 組合模式 composite 將物件組合成樹形結構以表示 部分 整體 的層次結構。組合模式使得使用者對單個物件和組合物件的使用具有一致性。何時使用 需求中提現部分和整體的層次結構,開發...