composite模式学习笔记

   考虑一个树状层次结构,包含了3种节点,根节点,中间节点,以及叶子节点。对于中间节点,提供接口遍历他的子节点,而叶子节点则不需要。但有时需将中间节点和叶子节点的操作统一起来。例如在一个图形绘制的程序中,一幅图可有点,线,多边形,文字这样图元构成,同时若干个图元也可合在一块统一视作一个图元。基本图元视作一个实体类,而多个图元合在一块的对象则视为一个容器类,要将2者的操作统一起来,就可以采用组合模式。具体实现是让实体类和容器类对象派生于同一个基类,在基类中定义统一的操作接口。结构图如下:

Component:为组合中的对象生命接口

在适当情况下,实现所有类共有的接口的缺省行为

声明一个接口用于访问和管理Component的子组件

在递归结构中定义一个接口,用于访问一个父部件。

Leaf:在组合中表示叶节点对象

Composite:定义所有子部件的行为,实现与子部件相关的操作。

Composite实现任意组合方式构建定制新的Component。


代码示例:

class component {
public:
virtual composite* getComposite() { return 0; }

virtual void print(){ };
};

class leaf :public component {
public:
void print() { printf("leaf\n");}
};

class composite : public component{
public:
composite* getComposite() { return this; };
void addComponent(component *com ) { if(com) _components.push_back(com); };

void print(){
if(_components.size()==0)
{
printf("empty composite\n");
return ;
}


for (list<component*>::iterator i=_components.begin();i!=_components.end();i++)
{
(*i)->print();
}
};
private:
list<component*> _components;
};

posted on 2012-05-02 10:39 Marv 阅读(161) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2012年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿

随笔档案

文章分类

搜索

最新评论

阅读排行榜

评论排行榜