设计模式之简单工厂(C++)

1. 作用

简单工厂是工厂模式的简化版,作用就不必多说,可以参看工厂模式。
它与工厂模式的区别在于去除了抽象工厂类,并且工厂方法也为静态方法

2. UML类图

这里写图片描述
参与者:

  • Product:产品抽象类,定义产品的接口。
  • ConcreteProduct:产品,实现产品接口。
  • Factory:工厂类,定义静态(static)工厂方法,实现产品的创建,通常传入参数是产品的代号,即枚举或者字符串标记。

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(){}

    //核心接口
    static Product* createProduct(ProductEnum productName);
};

/**小明的工厂**/
Product* XiaoMFactory::createProduct(ProductEnum productName)
{
    Product *p;

    switch (productName)
    {
    case    TV_Enum:
        p = new Tv;
        break;
    case    Fridge_Enum:
        p = new Fridge;
        break;
    case    Washer_Enum:
        p = new Washer;
        break;
    default:break;
    }

    return p;
}

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

    //开始造产品
    Product * tv = XiaoMFactory::createProduct(TV_Enum);
    tv->showMe();

    Product * washer = XiaoMFactory::createProduct(Washer_Enum);
    washer->showMe();

    Product * fridge = XiaoMFactory::createProduct(Fridge_Enum);
    fridge->showMe();


    delete tv;
    delete washer;
    delete fridge;

    return 0;

}

4. 优缺点

这里优缺点仅与工厂模式作比较。
优点:简化了工厂类,无需抽象工厂,一个静态工厂方法就可以创建产品,调用方便。
缺点:不适合扩展,增减产品只能在静态方法中修改。

5. 适用场景

在创建对象较少,扩展可能性不太大,又想将客户与创建过程解耦时,可以使用。

6. 总结

简单工厂就是工厂模式的简化版本,用最简单的方法实现了创建对象过程与客户的解耦。

猜你喜欢

转载自blog.csdn.net/a369189453/article/details/81036595