设计模式之工厂方法模式

来源:互联网 发布:四连杆机构设计软件 编辑:程序博客网 时间:2024/05/17 07:38

      上篇我们讲了简单工厂模式,也提到了简单工厂模式的缺点,这篇我们来讲一下工厂方法模式,而工厂方法模式在一定程度上避免了简单工厂模式的那些缺点,废话不多说,上代码咯。

工厂方法模式:

以下代码在VS2012上编译通过

#include <iostream>using namespace std;class Product{public: virtual void showProduct() {cout<<"showProduct"<<endl;}};class ProductA:public Product{public: void showProduct() {  cout<<"showProductA"<<endl; }};class ProductB:public Product{public: void showProduct(){  cout<<"showProductB"<<endl; }};class Factory{public: virtual Product* createProduct() {return NULL;} };class FactoryA: public Factory{public: Product* createProduct() { return new ProductA(); }};class FactoryB:public Factory{public: Product* createProduct(){ return new ProductB(); }};int _tmain(int argc, _TCHAR* argv[]){ Factory* fa=new FactoryA();//创建生产A产品的工厂 Product* pa=fa->createProduct();//生产A产品 pa->showProduct();//显示A产品 Factory* fb=new FactoryB();//创建生产B产品的工厂 Product* pb=fb->createProduct();//生产B产品 pb->showProduct();//显示B产品 return 0;}

执行结果:

showProductA

showProductB


       由以上可以看出工厂方法模式和简单工厂模式最大的不同是对于工厂类的抽象,也就是说对于每一个产品类都有一个生产该产品的工厂类。这样的做法好处在于要修改产品的创建时,只要修改该产品对应的工厂类就行了,不影响其他产品对应的工厂类。这样自然也符合开闭原则。但是缺点读者可能也发现了,就是每新增一个产品就要新增一个该产品对应的工厂类,代码量是成对增加的,而且代码太多,系统复杂度增加,也不易于维护。

0 0
原创粉丝点击