简单工厂C++示例
简单工厂UML图
简单工厂C++源码
//AbstractProduct.h
#ifndef ABSTRACTPRODUCT_H
#define ABSTRACTPRODUCT_H
class AbstractProduct
{
public:
virtual void color()=0;
virtual void shape()=0;
};
#endif
//Factory.h
#ifndef FACTORY
#define FACTORY
#include <QString>
class AbstractProduct;
class Factory
{
public:
AbstractProduct* createProduct(const QString& productName);
};
#endif
//Factory.cpp
#include <QString>
#include "Factory.h"
#include "ProductA.h"
#include "ProductB.h"
AbstractProduct *Factory::createProduct(const QString &productName)
{
AbstractProduct *product = NULL;
if("ProductA"==productName)
{
product = new ProductA();
}
else if("ProductB"==productName)
{
product = new ProductB();
}
return product;
}
//ProductA.h
#ifndef PRODUCTA_H
#define PRODUCTA_H
#include "AbstractProduct.h"
class ProductA:public AbstractProduct
{
public:
ProductA();
virtual void color();
virtual void shape();
};
#endif
//ProductA.cpp
#include <QDebug>
#include "ProductA.h"
ProductA::ProductA()
{
}
void ProductA::color()
{
qDebug("The ProductA is red");
}
void ProductA::shape()
{
qDebug("The ProductA is square");
}
//ProductB.h
#ifndef PRODUCTB_H
#define PRODUCTB_H
#include "AbstractProduct.h"
class ProductB:public AbstractProduct
{
public:
ProductB();
virtual void color();
virtual void shape();
};
#endif
//ProductB.cpp
#include <QDebug>
#include "ProductB.h"
ProductB::ProductB()
{
}
void ProductB::color()
{
qDebug("The ProductB is black");
}
void ProductB::shape()
{
qDebug("The ProductB is triangle");
}