zoukankan      html  css  js  c++  java
  • 设计模式 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;
    
    }
    
  • 相关阅读:
    c++ explicit 用法摘抄
    FBX SDK 从2012.1 到 2013.3 变化
    虚幻4 虚拟漫游场景 制作过程
    3DMAX 建立场景 工作流程
    保存路径选择对话框
    MFC 简单输出EXCEL
    快速使用Log4Cpp
    C# 调用 MFC DLL
    VS建立可供外部调用的MFC类DLL,C#调用MFC调用
    面试中被问到 “你对加班的看法” 该如何回答?
  • 原文地址:https://www.cnblogs.com/fundou/p/11103697.html
Copyright © 2011-2022 走看看