积木

No sub title

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  140 Posts :: 1 Stories :: 11 Comments :: 0 Trackbacks

常用链接

留言簿(1)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

设计模式学习总结之六

八: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();
}

//个人认为,该模式,很怪啊。。因为通过这样转换后,原本的父子关系就被破坏掉了。
//如果有大侠理解的深的话,,还请不吝补充下。。不盛感激。

posted on 2011-05-18 00:46 Jacc.Kim 阅读(232) 评论(0)  编辑 收藏 引用 所属分类: 设计模式

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理