设计模式 --- 工厂模式(Factory)

类比

待续…

C++代码举例

#include <iostream>

using namespace std;

typedef enum {RECTANGLE, CIRCLE, SQUARE} ShapeType;


class IShape
{
public:
    virtual void draw() = 0;
};

class Rectangle : public IShape
{
public:
    void draw()
    {
        cout << "Inside draw() of class Rectangle\n";
    }
};


class Circle : public IShape
{
public:
    void draw()
    {
        cout << "Inside draw() of class Circle\n";
    }
};


class Square : public IShape
{
public:
    void draw()
    {
        cout << "Inside draw() of class Square\n";
    }
};


class ShapeFactory
{
public:
    static IShape* create(ShapeType type)
    {
        if (type == RECTANGLE)
        {
            return new Rectangle();
        }
        else if (type == CIRCLE)
        {
            return new Circle();
        }
        else if (type == SQUARE)
        {
            return new Square();
        }
        else
        {
            cout << "===> non valid shape type\n";
            return NULL;
        }
    }
};


int main()
{
    IShape* pShape = NULL;

    pShape = ShapeFactory::create(RECTANGLE);
    if (pShape != NULL)
    {
        pShape->draw();
        delete pShape;
    }
    else
    {
        cerr << "Error in ShapeFactory\n";
        return 1;
    }


    pShape = ShapeFactory::create(CIRCLE);
    if (pShape != NULL)
    {
        pShape->draw();
        delete pShape;
    }
    else
    {
        cerr << "Error in ShapeFactory\n";
        return 1;
    }


    pShape = ShapeFactory::create(SQUARE);
    if (pShape != NULL)
    {
        pShape->draw();
        delete pShape;
    }
    else
    {
        cerr << "Error in ShapeFactory\n";
        return 1;
    }

    return 0;
}

输出如下,
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值