简单工厂模式(C++)

前言

  简单工厂的模式在程序编写过程中比较常用,很多人有意无意的会用到这种方法,其实就是定义接口,然后通过继承的方式实现具体的功能,最后在一个工厂类中,根据参数进入到各个分支中获取接口类的指针对象,从而实现创建。
  另外,工厂模式的创建,如果语言本身支持反射的话,switch的分支判断可以改成反射方法实现,这样会更加简单明了(C++本身不支持反射机制,Java原生支持,当然,QT和MFC的框架是支持这种反射机制

简单工厂模式

1. 概要

简单工厂模式概要

2. 实现方法

/******* 简单工厂的例子 ********/
#ifndef SIMPLE_FACTORY_H
#define SIMPLE_FACTORY_H

#include <iostream>

using namespace std;

//定义产品类型信息
typedef enum{
    Tank_Type_A,
    Tank_Type_B,
    Tank_Type_Other
}Tank_Type;

//抽象产品类
class Tank
{
public:
    virtual const string & type() = 0;
    virtual ~Tank(){ }
};

//具体产品类A
class Tank_A : public Tank{
public:
    Tank_A():Tank(),m_strType("Tank_A"){ }
    const string & type() override{
        cout << m_strType.data() << endl;
        return m_strType;
    }
private:
    string m_strType;
};

//具体产品类B
class Tank_B : public Tank{
public:
    Tank_B():Tank(),m_strType("Tank_B"){ }
    const string & type() override{
        cout << m_strType.data() << endl;
        return m_strType;
    }
private:
    string m_strType;
};

//工厂类
class Tank_Factory
{
public:
    //根据产品信息创建具体的产品类实例,返回一个抽象产品类
    Tank* createTank(Tank_Type type){
        switch(type){
        case Tank_Type_A:
            return new Tank_A();
            break;
        case Tank_Type_B:
            return new Tank_B();
            break;
        default:
            return nullptr;
        }
    }

};

//简单工厂例子
class Simple_Factory
{
public:
    Simple_Factory();
    //简单工厂模式的应用例子
    void run_example(){
       cout << "***** Simple_Factory *****" << endl;

       Tank_Factory *factory = new Tank_Factory();//创建工厂
       Tank *tank_A = factory->createTank(Tank_Type_A);//实例化对象A
       Tank *tank_B = factory->createTank(Tank_Type_B);//实例化对象B

       tank_A->type();
       tank_B->type();

       delete tank_A;
       tank_A = nullptr;
       delete tank_B;
       tank_B = nullptr;
       delete factory;
       factory = nullptr;

    }
};

#endif // SIMPLE_FACTORY_H

3. 设计模式总结

  总之,简单工厂的模式让创建过程推迟到子类中,但是需要注意的是,简单工厂突出的是简单二字,如果是简单的对象的话,直接new一个对象即可,此时如果再用简单工厂的话,会增加一个工厂类,从而让整个过程变得不简单

  另外,C++中的一些设计模式的总结导航,可以参考这里(设计模式总结)。

参考资料

[1] https://www.runoob.com/design-pattern/factory-pattern.html
[2] https://www.cnblogs.com/chengjundu/p/8473564.html

posted @ 2020-06-27 16:49  临摹摆渡  阅读(323)  评论(0编辑  收藏  举报