首页 > 编程语言 > 详细

简单工厂模式(C++)

时间:2020-06-27 17:37:10      阅读:66      评论:0      收藏:0      [点我收藏+]

前言

??简单工厂的模式在程序编写过程中比较常用,很多人有意无意的会用到这种方法,其实就是定义接口,然后通过继承的方式实现具体的功能,最后在一个工厂类中,根据参数进入到各个分支中获取接口类的指针对象,从而实现创建。
??另外,工厂模式的创建,如果语言本身支持反射的话,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

简单工厂模式(C++)

原文:https://www.cnblogs.com/treature/p/13198777.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!