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

factory

factory.h

#ifndef _FACTORY_H_
#define _FACTORY_H_

#include "product.h"

class Product;
class Factory
{
    public:
    Factory();
    ~Factory();
    void AffirmOrder();
    Product* CreateProduct();

    protected:

    private:
    int product_num;
};

#endif

factory.cpp

#include "factory.h"
#include <iostream>
#include <sstream>
using namespace std;

Factory::Factory()
    :product_num(0)
{
    cout<<"factory construct"<<endl;
    cout<<"current product number:"<<product_num<<endl;
}
Factory::~Factory()
{
    cout<<"factory destruct"<<endl;
}

void Factory::AffirmOrder()
{
    cout<< "please select order 1 or 2 or 3"<<endl;
    string num;
    cin>>num;
    product_num = stoi(num);    //string转int
    cout<<"new order product number:"<<product_num<<endl;
}

Product* Factory::CreateProduct()  //创建指定产品
{
    switch (product_num)
    {
    case 1:return new Product1();break;
    case 2:return new Product2();break;
    case 3:return new Product3();break;
    default:return nullptr;break;
    }
}

products

product.h

#ifndef _PRODUCT_H_
#define _PRODUCT_H_

class Product
{
    public:
    Product();
    virtual ~Product(); //使用多态时,virtual避免内存泄漏,否则派生类的析构函数不被执行
    protected:

    private:
};

class Product1 : public Product
{
    public:
    Product1();
    ~Product1();
    protected:

    private:
};

class Product2 : public Product
{
    public:
    Product2();
    ~Product2();
    protected:
    private:
};

class Product3 : public Product
{
    public:
    Product3();
    ~Product3();
    protected:
    private:
};
#endif

product.cpp

#include "product.h"
#include<iostream>
using namespace std;

Product::Product()
{
    cout<<"Product construct"<<endl;
}
Product::~Product()
{
    cout<<"Product destruct"<<endl;
}
/*----------------------Product1------------------------*/
Product1::Product1()
{
    cout<<"Product1 construct"<<endl;
}
Product1::~Product1()
{
    cout<<"Product1 destruct"<<endl;
}
/*----------------------Product2------------------------*/
Product2::Product2()
{
    cout<<"Product2 construct"<<endl;
}
Product2::~Product2()
{
    cout<<"Product2 destruct"<<endl;
}
/*-----------------------Product3-----------------------*/
Product3::Product3()
{
    cout<<"Product3 construct"<<endl;
}
Product3::~Product3()
{
    cout<<"Product3 destruct"<<endl;
}

测试

#include <QCoreApplication>
#include "factory.h"
#include "product.h"

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Factory *factory = new Factory();
    factory->AffirmOrder(); //工厂确认产品订单
    Product *product = factory->CreateProduct();

    if (product != nullptr)
    {
        delete product;
        product = NULL;
    }
    delete factory;
    return a.exec();
}

输出

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值