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;
    
    }
    
  • 相关阅读:
    Python 中的一些小技巧
    Java/Python/Elixir 正则库使用上的注意事项
    Scrapy 学习笔记(一)数据提取
    记第一次面试
    Spring Web MVC 笔记
    Java 单元测试
    Spring 笔记(四)AOP
    C 语言 进阶
    编程的智慧
    Spring 笔记(三)Bean 装配
  • 原文地址:https://www.cnblogs.com/fundou/p/11103697.html
Copyright © 2011-2022 走看看