設計模式學習總結之六
八:Composite模式(即:復合模式)
復合模式旨在將遞歸處理,轉化為一種順序處理。明顯地,遞歸處理,相對較耗資源。也相對較為抽象些。而用一個Composite類對象來轉化處理
遞歸處理。將顯得直觀些。它與Decorator模式的區別是:Composite模式,旨在構造一個類。這個類,將原本是遞歸組織的樹狀結構,轉換為直觀地轉化為
順序結構。即:它重要于轉化表現。而Decorator模式(即:修飾模式),其重要簡化管理原本系統類體系結構。不至于將類繼承體系越來越深。同時,不
至于讓原本設計好的類,越來越復雜化。同時又可以為原本類體系添加新的功能(即:書上所述的新的職責)。
下面簡要看下該模式的代碼結構:
class ClassNode
{
public:
//寫下構造函數等
...
public:
virtual void Operation(void);
virtual void Add(ClassNode* pNode);
virtual void Remove(ClassNode* pNode);
virtual ClassNode* GetNode(int iIndex);
}
//Composite類
class Composite : public ClassNode
{
public:
typedef vector<ClassNode* > NODELISTVEC;
public:
void Operation(void)
{
for (NODELISTVEC::iterator iter = m_vNodeList.begin(); iter != m_vNodeList.end(); iter++)
iter->Operation();
}
void Add(ClassNode* pNode){//do something...}
void Remove(ClassNode* pNode){//do something...}
ClassNode* GetNode(int iIndex){//do something...}
private:
NODELISTVEC m_vNodeList;
}
//調用
int main(int argc, char* argv[])
{
Composite* MyCompositeForNodes = new ...;
ClassNode* xxx = new ...;//創建節點。當然這里只是為了演示,所以只創建一個節點。一棵樹有可能有N個節點。
MyCom,positeForNodes.Add(xxx );
...
MyCompositeForNodes.Operation();
}
//個人認為,該模式,很怪啊。。因為通過這樣轉換后,原本的父子關系就被破壞掉了。
//如果有大俠理解的深的話,,還請不吝補充下。。不盛感激。