上一篇博客写的简单工厂模式
简单工厂模式的缺点是当新增产品的时候就要去修改工厂的类,这就违反了开放封闭原则,(类、模块、函数)可以扩展,但是不可以修改,于是,就出现了工厂方法模式。
所谓工厂方法模式,是指定义一个用于创建对象的接口,让子类决定实例化哪一个类。打个比方现在有A、B两种产品,那么久开两个工厂。工厂A负责生产A产品,工厂B负责生产B种产品。
代码实现:
#include <iostream>
using namespace std;
class AbstractProduct
{
public:
AbstractProduct(string name) :mname(name)
{}
virtual void operation() = 0;
virtual ~AbstractProduct()
{}
protected:
string mname;
};
class ProductA : public AbstractProduct
{
public:
ProductA(string name) :AbstractProduct(name)
{}
~ProductA()
{}
virtual void operation()
{
cout << "ProductA::Operation()" << endl;
}
};
class ProductB : public AbstractProduct
{
public:
ProductB(string name) :AbstractProduct(name)
{}
~ProductB()
{}
virtual void operation()
{
cout << "ProductB::Operation()" << endl;
}
};
class AbstractFactory
{
public:
virtual ~AbstractFactory(){}
virtual AbstractProduct* createProduct() = 0;
};
class FactoryA : public AbstractFactory
{
public:
AbstractProduct* createProduct()
{
return new ProductA("A");
}
};
class FactoryB : public AbstractFactory
{
public:
AbstractProduct* createProduct()
{
return new ProductB("B");
}
};
class ProductC : public AbstractProduct
{
public:
ProductC(string name) :AbstractProduct(name)
{}
~ProductC()
{}
void operation()
{
cout << "ProductC::operation()" << endl;
}
};
class FactoryC : public AbstractFactory
{
public:
AbstractProduct* createProduct()
{
return new ProductC("C");
}
};
int main()
{
AbstractFactory* af = new FactoryC();
AbstractProduct* apa = af->createProduct();
apa->operation();
delete apa;
delete af;
return 0;
}
运行结果: