组合模式(Composite)
来源:互联网 发布:微信网络设置在哪里 编辑:程序博客网 时间:2024/05/22 12:55
1.目的
有的需要将对象组织成树形结构,分为枝节点和叶节点,枝节点持有叶节点,同时需要枝节点和叶节点具有相同的行为(对外暴露同样的接口)
2.代码
composite.h
#ifndef COMPOSITE_H_#define COMPOSITE_H_#include <list>#include <string>#include <iostream>using namespace std;class Component{public:Component(string arg):name(arg){}virtual ~Component(){}virtual void add(Component&)=0;virtual void del(Component&)=0;virtual void display()=0;protected:string name;};class Composite: public Component{public:Composite(string arg):Component(arg){}void add(Component& arg){lists.push_back(&arg);}void del(Component& arg){lists.remove(&arg);}void display(){cout<<"--"<<name<<endl;list<Component*>::iterator iter = lists.begin();while(iter != lists.end()){(*iter)->display();iter++;}}private:list<Component*> lists;};class Leaf: public Component{public:Leaf(string arg):Component(arg){}void add(Component& arg){cout<<"can not call this "<<endl;}void del(Component& arg){cout<<"can not call this "<<endl;}void display(){cout<<"----"<<name<<endl;}};#endif /* COMPOSITE_H_ */
composite.cpp
#include "Composite.h"void composite(){Composite root("root");Composite level1("level1");Leaf leaf11("Leaf11");Leaf leaf12("Leaf12");Composite level2("level2");Leaf leaf21("Leaf21");Leaf leaf22("Leaf22");Leaf leaf23("Leaf23");level2.add(leaf21);level2.add(leaf22);level2.add(leaf23);level1.add(leaf11);level1.add(leaf12);root.add(level1);root.add(level2);root.display();}
执行结果:
--root
--level1
----Leaf11
----Leaf12
--level2
----Leaf21
----Leaf22
----Leaf23
0 0
- 组合模式(Composite)
- 组合模式(Composite)
- Composite(组合模式)
- 组合(Composite)模式
- 组合模式(Composite)
- composite(组合)模式
- Composite(组合)模式
- 组合模式(Composite)
- 组合(composite)模式
- 组合模式(Composite)
- 组合模式(Composite)
- 组合模式(Composite)
- 组合模式(Composite)
- 组合模式(Composite)
- Composite(组合模式)
- 组合模式(Composite)
- 组合模式(Composite)
- Composite(组合模式)
- 初识MKNetworkKit
- iOS开发之UIScrollView
- 关于图中节点间的概率求解问题-1
- 消息传递机制——block
- 约瑟夫问题。
- 组合模式(Composite)
- http post方式获取json参数
- ubuntu 无法调节屏幕亮度问题
- html练习
- 动态规划中的矩阵链乘法的介绍与理解(包含c源代码)
- Win7安vc2008编译报LINK : fatal error LNK1000: Internal error during IncrBuildImage .
- 数据库读写的一些心得
- 美团一二三面经历
- poj-1693