2008年4月5日 星期六

Composite

Composite
很難解釋
簡單的說應該像是樹狀結構
我們定義一個樹狀結構節點的介面
每個節點又包含其他節點
這些實做這個介面的物件就能夠用組合起來(如樹狀結構般)
Java SWING的component就是用這個方法設計的


#include
#include
using namespace std;

class component {
private:
list children;
public:

component() {

}

virtual void Action()
{}

void Trace()
{
this->Action();
list::iterator i;
for( i = children.begin(); i != children.end(); ++i)
{
(*i)->Trace();
}
}

void Add(component* child) {
children.push_back(child);
}

void Remove(component* child) {
children.remove(child);
}

};

class NodeA : public component {
public:
virtual void Action()
{cout << "NodeA\n";}
};

class NodeB : public component {
public:
virtual void Action()
{cout << "NodeB\n";}
};

class NodeC : public component {
public:
virtual void Action()
{cout << "NodeC\n";}
};

int main()
{
NodeA a;
NodeB b1;
NodeB b2;
NodeC c1;
NodeC c2;
NodeC c3;

a.Add(&b1);
a.Add(&b2);
b1.Add(&c1);
b1.Add(&c2);
b2.Add(&c3);

a.Trace();

return 0;
}

沒有留言: