设计模式之多工厂(C++)

1. 作用

简单工厂是工厂模式的扩展版,作用就不必多说,可以参看工厂模式。
它与工厂模式的区别在于为每一个产品定义一个创造者,即一个工厂方法只创建一个对象。
- UML类图
这里写图片描述
参与者:

  • Product:产品抽象类,定义产品的接口。
  • ConcreteProduct:产品,实现产品接口。
  • Factory:工厂抽象类,主要定义创建产品的接口,即工厂方法,返回产品对象。
  • ConcreteFactory:工厂具体类,实现产品的创建,一个具体工厂类关联一个具体产品。

3.实现

举例:小明最近开了一家工厂名字叫——小明工厂,可以生产电视机,冰箱,洗衣机,刚开始品种不能太多,也不能太少。

  • 类图
    这里写图片描述

  • 代码

#include <iostream>
using namespace std;

/****************产品****************************/
typedef enum//代号枚举
{
    TV_Enum,
    Fridge_Enum,
    Washer_Enum
}ProductEnum;

//产品抽象类
class Product
{
public:
    Product(){}
    virtual ~Product(){}

    virtual void showMe() = 0;
};


/***电视机***/
class Tv : public Product
{
public:
    Tv(){}
    ~Tv(){}

    virtual void showMe()
    {
        cout << "我是一台电视机!" << endl;
    }
};


/***冰箱***/
class Fridge : public Product
{
public:
    Fridge(){}
    ~Fridge(){}

    virtual void showMe()
    {
        cout << "我是一台冰箱!" << endl;
    }
};

/***洗衣机***/
class Washer :public Product
{
public:
    Washer(){}
    ~Washer(){}

    virtual void showMe()
    {
        cout << "我是一台洗衣机!" << endl;
    }
};


/****************************工厂***************************/
/**工厂抽象类,一般工厂必须具备的功能**/
class XiaoMFactory
{
public:
    XiaoMFactory(){}
    virtual ~XiaoMFactory(){}

    //核心接口
    virtual Product* createProduct() = 0;
};

/***TV工厂***/
class TVFactory :public XiaoMFactory
{
public:
    TVFactory(){}
    virtual ~TVFactory(){}

    //核心接口
    virtual Product* createProduct()
    {
        return new Tv;
    }
};

/***Fridge工厂***/
class FridgeFactory :public XiaoMFactory
{
public:
    FridgeFactory(){}
    virtual ~FridgeFactory(){}

    //核心接口
    virtual Product* createProduct()
    {
        return new Fridge;
    }
};

/***Washer工厂***/
class WasherFactory :public XiaoMFactory
{
public:
    WasherFactory(){}
    virtual ~WasherFactory(){}

    //核心接口
    virtual Product* createProduct()
    {
        return new Washer;
    }
};



/***********工厂开始运行*********************/
int main()
{


    //开始造产品
    XiaoMFactory *tvFactory = new TVFactory;
    Product * tv = tvFactory->createProduct();
    tv->showMe();

    XiaoMFactory *washerfactory = new WasherFactory;
    Product * washer = washerfactory->createProduct();
    washer->showMe();

    XiaoMFactory *fridgefactory = new FridgeFactory;
    Product * fridge = fridgefactory->createProduct();
    fridge->showMe();


    delete tvFactory;
    delete washerfactory;
    delete fridgefactory;
    delete tv;
    delete washer;
    delete fridge;

    return 0;

}

结果:
我是一台电视机!
我是一台洗衣机!
我是一台冰箱!
请按任意键继续. . .

4 优缺点

这里优缺点仅与工厂模式作比较。
优点:一个产品对应一个具体工厂类,结构更加清晰,职责简单。
缺点:扩展比较复杂,每增加一个产品需要增加一个具体工厂类。

5. 适用场景

在创建对象且需要初始化对象操作比较多的时候,可以使用多工厂简单化工厂方法。

6. 总结

简单工厂就工厂模式的扩展版本,通过增加具体工厂使工厂方法职责单一,简单化,但是扩展相对复杂。

猜你喜欢

转载自blog.csdn.net/a369189453/article/details/81036973
今日推荐