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);
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();
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()
{
cout<<"Product1 construct"<<endl;
}
Product1::~Product1()
{
cout<<"Product1 destruct"<<endl;
}
Product2::Product2()
{
cout<<"Product2 construct"<<endl;
}
Product2::~Product2()
{
cout<<"Product2 destruct"<<endl;
}
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();
}
输出