GOOD:整体和部分可以被一致对待(如WORD中复制一个文字、一段文字、一篇文章都是一样的操作)
#ifndef __COMPOSITE_MODEL__ #define __COMPOSITE_MODEL__ #include <iostream> #include <string> #include <vector> using namespace std;class Component { public:string m_strName;Component(string strName){m_strName = strName;}virtual void add(Component* com) = 0;virtual void display(int nDepth) = 0; };class Leaf : public Component { public:Leaf(string strName) : Component(strName){}virtual void add(Component* com){cout<<"leaf can't add"<<endl;}virtual void display(int nDepth){string strtemp;for (int i=0; i<nDepth; ++i){strtemp += "-";}strtemp += m_strName;cout<<strtemp<<endl;} };class Composite : public Component { private:vector<Component*> m_component; public:Composite(string strName) : Component(strName) {}virtual void add(Component* com){m_component.push_back(com);}virtual void display(int nDepth){string strtemp;for(int i=0; i<nDepth; ++i){strtemp += "-";}strtemp += m_strName;cout<<strtemp<<endl;vector<Component*>::iterator iter = m_component.begin();while(iter!=m_component.end()){(*iter)->display(nDepth+2);iter++;}} };#endif //__COMPOSITE_MODEL__/* #include "CompositeModel.h" int _tmain(int argc, _TCHAR* argv[]) { Composite* p = new Composite("小王"); p->add(new Leaf("小李")); p->add(new Leaf("小赵"));Composite* p1 = new Composite("小小五"); p1->add(new Leaf("大三"));p->add(p1); p->display(1);return 0; } */