版权声明:本文为博主原创文章,未经博主允许不得转载。文章中有连接失效或是技术谬误的地方,请与我联系。 https://blog.csdn.net/luchengtao11/article/details/82379217
Product.h
#ifndef _PRODUCT_H_
#define _PRODUCT_H_
class AbstractProduct
{
public:
virtual void operation() = 0;
virtual ~AbstractProduct() {};
};
class ProductA :public AbstractProduct
{
public:
void operation();
};
class ProductB :public AbstractProduct
{
public:
void operation();
};
#endif // !_PRODUCT_H_
Factory.h
#ifndef _FACTORY_H_
#define _FACTORY_H_
#include "Product.h"
class AbstractFactory
{
public:
virtual AbstractProduct *createProduct() = 0;
virtual ~AbstractFactory() {};
};
class FactoryA:public AbstractFactory
{
public:
AbstractProduct * createProduct();
};
class FactoryB :public AbstractFactory
{
public:
AbstractProduct * createProduct();
};
#endif // !_FACTORY_
Product.cpp
#include "Product.h"
#include <iostream>
using namespace std;
void ProductA::operation()
{
cout << "Product A" << endl;
}
void ProductB::operation()
{
cout << "Product B" << endl;
}
Factory.cpp
#include "Factory.h"
AbstractProduct * FactoryA::createProduct()
{
return new ProductA();
}
AbstractProduct * FactoryB::createProduct()
{
return new ProductB();
}
Main.cpp
#include "Factory.h"
#include "Product.h"
#include <iostream>
int main()
{
AbstractFactory *factory = new FactoryA();
AbstractProduct *product = factory->createProduct();
product->operation();
delete factory;
factory = NULL;
delete product;
product = NULL;
factory = new FactoryB();
product = factory->createProduct();
product->operation();
delete factory;
factory = NULL;
delete product;
product = NULL;
}