设计模式 C++ 抽象工厂模式

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

}
原文地址:https://www.cnblogs.com/fundou/p/11103697.html