设计模式之工厂方法模式

本文介绍了工厂方法模式的基本概念,并通过示例代码展示了如何实现产品类和对应的工厂类,对比简单工厂模式,阐述了其优点与局限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

工厂方法模式:

以下代码在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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值