product.h
#ifndef PRODUCT_H
#define PRODUCT_H
#include <QtDebug>
class Product
{
public:
Product(){}
virtual void show() = 0;
};
#endif // PRODUCT_H
productA.h
#ifndef PRODUCTA_H
#define PRODUCTA_H
#include "product.h"
class ProductA : public Product
{
public:
ProductA(){}
void show(){ qDebug() << "this is ProductA";}
};
#endif // PRODUCTA_H
factory.h
#ifndef FACTORY_H
#define FACTORY_H
#include "product.h"
class Factory
{
public:
Factory(){}
virtual Product *createProduct() = 0;
};
#endif // FACTORY_H
factoryA.h
#ifndef FACTORYA_H
#define FACTORYA_H
#include "factory.h"
#include "productA.h"
#include "product.h"
class FactoryA : public Factory
{
public:
FactoryA(){}
Product *createProduct()
{
return new ProductA();
}
};
#endif // FACTORYA_H
main
#include <QApplication>
#include <QtDebug>
#include "factory.h"
#include "factoryA.h"
#include "product.h"
//工廠方法模式
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Factory *factory = new FactoryA();
Product *product = factory->createProduct();
product->show();
return a.exec();
}
相對於簡單工廠,工廠方法對工廠對象進行了封裝,一個工廠只創建一種產品。新增產品,新增工廠,不同於簡單工廠需要修改工廠中的判斷條件。這符合開放-封閉原則
UML