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;
    
    }
    
  • 相关阅读:
    20200323 Go语言基础
    20200313 图表工具与redis使用
    20200312 CMDB的磁盘数据查询
    20200311 CMDB的表设计
    20200320 代码发布之完结
    20200319 代码发布之任务发布钩子脚本
    Ubuntu 安装 MySQL 服务
    使用U盘重装系统(删除掉系统自带的Windows 10)
    Linux & Windows 上安装 Qt
    初次使用Tampermonkey脚本管理器
  • 原文地址:https://www.cnblogs.com/fundou/p/11103697.html
Copyright © 2011-2022 走看看