设计模式学习总结之六
八: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();
}
//个人认为,该模式,很怪啊。。因为通过这样转换后,原本的父子关系就被破坏掉了。
//如果有大侠理解的深的话,,还请不吝补充下。。不盛感激。