目的
将对象组合成树形结构,以表示“部分-整体”的层次结构
结构
示例代码
//test.h
#ifndef _TEST_H_
#define _TEST_H_
#include <list>
#include <iostream>
using namespace std;
class Component
{
public:
const char * name(){ return m_name; }
virtual void draw();
virtual void add(Component * com){};
virtual void remove(Component *com){};
virtual ~Component();
protected:
Component(const char * name);
private:
const char * m_name;
};
class Leaf :public Component
{
public:
Leaf(const char *name);
~Leaf();
virtual void draw();
private:
};
class Composite:public Component
{
public:
~Composite();
virtual void draw(){};
virtual void add(Component * com);
virtual void remove(Component *com);
virtual list<Component *>::iterator createIterator();
protected:
Composite(const char *name);
private:
list<Component *> m_component;
};
class LeafComposite:public Composite
{
public:
LeafComposite(const char * name);
~LeafComposite();
virtual void draw();
private:
};
class LeafCompositeA :public Composite
{
public:
LeafCompositeA(const char * name);
~LeafCompositeA();
virtual void draw();
private:
};
#endif // !_TEST_H_
----------
//test.cpp
#include "test.h"
Component::Component(const char * name)
:m_name(name)
{
}
void Component::draw()
{
cout << "component 类" << endl;
}
Component::~Component()
{
}
Leaf::Leaf(const char *name)
:Component(name)
{
}
Leaf::~Leaf()
{
}
void Leaf::draw()
{
cout << "叶子,继承Component" << endl;
}
Composite::Composite(const char *name)
:Component(name)
{
}
Composite::~Composite()
{
}
void Composite::add(Component * com)
{
m_component.push_back(com);
cout <<this->name()<<"添加了一个部件:" << com->name() << endl;
return;
}
void Composite::remove(Component *com)
{
for (list<Component*>::iterator iter = m_component.begin(); iter != m_component.end();iter++)
{
Component * &c = *iter;
if (c==com)
{
delete c;
m_component.erase(iter);
break;
}
}
return;
}
list<Component *>::iterator Composite::createIterator()
{
return m_component.begin();
}
LeafComposite::LeafComposite(const char * name)
:Composite(name)
{
}
LeafComposite::~LeafComposite()
{
}
void LeafComposite::draw()
{
cout << "Composite 的叶子类 " << endl;
}
LeafCompositeA::LeafCompositeA(const char * name)
:Composite(name)
{
}
LeafCompositeA::~LeafCompositeA()
{
}
void LeafCompositeA::draw()
{
cout << "Composite 的叶子类A " << endl;
}
----------
// main.cpp
#include "test.h"
int main()
{
LeafComposite * leafCom = new LeafComposite("叶子composite");
LeafCompositeA *leafComA = new LeafCompositeA("叶子compositeA");
leafCom->draw();
leafComA->draw();
leafCom->add(leafComA);
leafComA->add(new Leaf("叶子Component"));
getchar();
return 0;
}
效果
- 定义了包含基本对象和组合对象的类层次结构 基本对象可以被组合成更复杂的组合对象,而组合对象又可以被组合
- 简化了客户代码
- 使得更容易增加新类型的组合
我的个人网站 http://www.breeziness.cn/
我的优快云 http://blog.youkuaiyun.com/qq_33775402转载请注明出处 小风code www.breeziness.cn