Composite模式

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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章