工厂模式基本与简单工厂模式差不多,在简单工厂中,每次添加一个产品子类都必须在工厂类中添加一个判断分支,这样违背了开放-封闭原则,因此,工厂模式就是为了解决这个问题而产生的。
既然每次都要判断,那我就把这些判断都生成一个工厂子类,这样,每次添加产品子类的时候,只需再添加一个工厂子类就可以了。这样就完美的遵循了开放-封闭原则。但这其实也有问题,如果产品数量足够多,要维护的量就会增加,好在一般工厂子类只用来生成产品类,只要产品子类的名称不发生变化,那么基本工厂子类就不需要修改,每次只需要修改产品子类就可以了。
同样工厂模式一般应该于程序中大部分地方都只使用其中一种产品,工厂类也不用频繁创建产品类的情况。这样修改的时候只需要修改有限的几个地方即可。
代码实现:
#include <iostream> #include <string> using namespace std; class Fruit{ public: virtual void sayName(){ cout<<"Fruit"<<endl; } }; class Banana: public Fruit{ public: virtual void sayName(){ cout<<"我是香蕉!"<<endl; } }; class Pear: public Fruit{ public: virtual void sayName(){ cout<<"我是梨子!"<<endl; } }; class FruitFactory{ public: virtual Fruit *getFruit(){ cout<<"FruitFactory::getFruit"<<endl; return nullptr; } }; class BananaFactory: public FruitFactory{ public: virtual Fruit *getFruit(){ return new Banana; } }; class PearFactory: public FruitFactory{ public: virtual Fruit *getFruit(){ return new Pear; } }; int main(){ FruitFactory *ff = nullptr; Fruit *fruit = nullptr; // 香蕉 ff = new BananaFactory; fruit = ff->getFruit(); fruit->sayName(); delete fruit; delete ff; // 梨子 ff = new PearFactory; fruit = ff->getFruit(); fruit->sayName(); delete fruit; delete ff; return 0; }
运行结果: