#include <iostream> #include <string> using namespace std; class Shape { public: virtual void draw()=0; virtual ~Shape(){} }; class Rectangle :public Shape { public: void draw() { cout << "from rectangle"<<endl; } }; class Circle :public Shape { public: void draw() { cout << "from circle"<< endl; } }; class Color { public: virtual void fill()=0; virtual ~Color(){} }; class Green:public Color { public: void fill() { cout << "color green"<<endl; } }; class Red:public Color { public: void fill() { cout << "color red"<<endl; } }; class AbFactory { public: virtual Shape* createShape(string Shape)=0; virtual Color* fillColor(string color)=0; virtual ~AbFactory(){} }; class ShapeFactory:public AbFactory { public: Color* fillColor(string color) { return NULL; } Shape* createShape(string shape) { if(shape=="rectangle"){ return new Rectangle(); } else if(shape == "circle") { return new Circle(); } return NULL; } }; class ColorFactory:public AbFactory { public: Color* fillColor(string color) { if(color=="green"){ return new Green(); } else if(color == "red") { return new Red(); } return NULL; } Shape* createShape(string shape) { return NULL; } }; int main(int argc, char *argv[]) { string str = "rectangle"; if(str == "rectangle") cout <<"1"<<endl; else cout <<"0"<<endl; AbFactory* abfactory; abfactory = new ShapeFactory(); Shape* shape = abfactory->createShape("rectangle"); if(shape == NULL) { cout << "shape is NULL"; } else { shape->draw(); } delete shape; delete abfactory; abfactory = new ColorFactory(); Color* color = abfactory->fillColor("red"); if(color == NULL) { cout << "color is NULL"; } else { color->fill(); } delete color; delete abfactory; return 0; }