概述
简单工厂模式属于对象创建型模式是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类的实例。它是工厂模式家族中最简单实用的模式。
关键点
工厂:整个模式的核心,负责实现创建所有实例的内部逻辑
抽象产品:所有具体产品的父类,负责描述所有实例所共有的公共接口
具体产品:最终创建的实例
应用
使用场景包括:工厂类负责创建的对象比较少(不会造成工厂方法中的业务逻辑太过复杂);客户端仅需知道传入工厂类的参数,对于如何创建对象不关心
创建产品类文件
#ifndef PRODUCT_H
#define PRODUCT_H
//水果产品基类
class Fruits
{
public:
virtual QString name()=0;
};
//具体水果产品
class Apple : public Fruits
{
public:
virtual QString name()
{
return "This is Apple";
}
};
class Banana : public Fruits
{
public:
virtual QString name()
{
return "this is Banana";
}
};
class Peach : public Fruits
{
public:
virtual QString name()
{
return "this is Peach";
}
};
#endif // PRODUCT_H
创建工厂类文件
#ifndef FACTORY_H
#define FACTORY_H
#include "product.h"
class Factory
{
public:
//产品类型
enum FRUITS_TYPE
{
APPLE_FRUITS ,
BANANA_FRUITS,
PEACH_FRUITS
};
Fruits * CreatePruduct(FRUITS_TYPE type)
{
Fruits *pFruits=nullptr;
switch (type) {
case APPLE_FRUITS:
pFruits=new Apple();
break;
case BANANA_FRUITS:
pFruits=new Banana();
break;
case PEACH_FRUITS:
pFruits=new Peach();
break;
default:
break;
}
return pFruits;
}
};
#endif // FACTORY_H
客户端使用:
#include <QCoreApplication>
#include <QDebug>
#include "factory.h"
#ifndef POINT_DELETE
#define POINT_DELETE(p) {if(p){delete(p);(p)=nullptr;}}
#endif
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//创建工厂
Factory *pFactory=new Factory();
//生产产品
Fruits *pFruits=pFactory->CreatePruduct(Factory::APPLE_FRUITS);
qDebug() << pFruits->name() << endl;
POINT_DELETE(pFruits);
pFruits=pFactory->CreatePruduct(Factory::BANANA_FRUITS);
qDebug() << pFruits->name() << endl;
POINT_DELETE(pFruits);
pFruits=pFactory->CreatePruduct(Factory::PEACH_FRUITS);
qDebug() << pFruits->name() << endl;
POINT_DELETE(pFruits);
return a.exec();
}
最终控制台输出结果:
运行环境为Qt的控制台输出