Composite模式
讓客戶可以統一處理單個對象和對象組合。 複合模式可以代表兩種情況。 在這種模式下,可以開發用於表示部分 - 整體層次結構的樹結構。在該例子中,Composite 模式可以處理Ellipse和Ellipse的組合,及graphicComposiote.
#include <iostream>
#include <vector>
#include <memory>
#include <algorithm>
using namespace std;
class Graphic
{
public:
virtual void print() const = 0;
virtual ~Graphic(){};
};
class Ellipse:public Graphic
{
public:
void print() const
{
cout<<"Ellipse \n"<<endl;
}
};
class CompositeGraphic: public Graphic
{
public:
public:
void print() const {
for(Graphic * a: graphicList_) {
a->print();
}
}
void add(Graphic *aGraphic)
{
graphicList_.push_back(aGraphic);
}
private:
vector<Graphic*> graphicList_;
};
int main()
{
// Initialize four ellipses
const auto_ptr<Ellipse> ellipse1(new Ellipse());
const auto_ptr<Ellipse> ellipse2(new Ellipse());
const auto_ptr<Ellipse> ellipse3(new Ellipse());
const auto_ptr<Ellipse> ellipse4(new Ellipse());
// Initialize three composite graphics
const auto_ptr<CompositeGraphic> graphic(new CompositeGraphic());
const auto_ptr<CompositeGraphic> graphic1(new CompositeGraphic());
const auto_ptr<CompositeGraphic> graphic2(new CompositeGraphic());
// Composes the graphics
graphic1->add(ellipse1.get());
graphic1->add(ellipse2.get());
graphic1->add(ellipse3.get());
graphic2->add(ellipse4.get());
graphic->add(graphic1.get());
graphic->add(graphic2.get());
// Prints the complete graphic (four times the string "Ellipse")
graphic->print();
return 0;
}