[大话设计模式] 第1章: 简单工厂模式

本文介绍了一种使用C++实现的工厂模式,该模式通过创建一个专门的工厂类来负责对象的实例化工作,以此来简化客户端代码并提高系统的可扩展性和可维护性。文章详细展示了如何根据不同类型的枚举值来实例化不同的产品类。

适用场景

  • 需要创建的对象很多,通常包含switch case或者if else语句,此时将对象的创建移入工厂类中

  • 由于对象的创建过程是我们不需要去关心的,而我们注重的是对象的实际操作,所以,我们需要分离对象的创建和操作两部分,如此,方便后期的程序扩展和维护。

UML类图

755739-20170731224746911-1774647966.png

ProductA、ProductB和ProductC继承自Product虚拟类,Show方法是不同产品的自描述;Factory依赖于ProductA、ProductB和ProductC,Factory根据不同的条件创建不同的Product对象。

C++实现

#include <iostream>

using namespace std;

typedef enum
{
    TypeA = 0,
    TypeB,
    TypeC,
} PRODUCTTYPE;

class Product
{
public:
    virtual ~Product(){}

    virtual void show() = 0;
};

class ProductA : public Product
{
public:
    void show(){
        cout << "ProductA" << endl;
    }
};

class ProductB : public Product
{
public:
    void show(){
        cout << "ProductB" << endl;
    }
};

class ProductC : public Product
{
public:
    void show(){
        cout << "ProductC" << endl;
    }
};

class Factory
{
public:
    Product *create_product(PRODUCTTYPE type);
};

Product *Factory::create_product(PRODUCTTYPE type)
{
    Product *pro;
    switch(type)
    {
        case TypeA:
            pro = new ProductA(); break;
        case TypeB:
            pro = new ProductB(); break;
        case TypeC:
            pro = new ProductC(); break;
        default:
            pro == NULL;
    }
    return pro;
}


int main()
{
    Factory *proFactory = new Factory();
    Product *proA = proFactory->create_product(TypeA);
    if(proA)
        proA->show();
    Product *proB = proFactory->create_product(TypeB);
    if(proB)
        proB->show();
    Product *proC = proFactory->create_product(TypeC);
    if(proC)
        proC->show();

    delete proA;
    delete proB;
    delete proC;
    delete proFactory;

    return 0;
}

转载于:https://www.cnblogs.com/moon1992/p/7266147.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值