上一篇博客写的简单工厂模式
简单工厂模式的缺点是当新增产品的时候就要去修改工厂的类,这就违反了开放封闭原则,(类、模块、函数)可以扩展,但是不可以修改,于是,就出现了工厂方法模式。
所谓工厂方法模式,是指定义一个用于创建对象的接口,让子类决定实例化哪一个类。打个比方现在有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; }
运行结果: