• 设计模式 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;
    
    }
    
  • 相关阅读:
    LOGO生成器
    【转】 iOS开发:Debug与Release版本NSLog屏蔽方法
    【转】IOS调试技巧:当程序崩溃的时候怎么办 iphone IOS
    【转】 Objective C实现多继承
    NSArray
    记一次 ios程序 内存优化记录LOG日志
    【转】[iOS] 关于 self = [super init];
    NSMutableArray
    Xcode调试利器 Instruments用户指南
    一段代码展现一个流程,流程在代码中内聚
  • 原文地址:https://www.cnblogs.com/fundou/p/11103697.html
Copyright © 2020-2023  润新知