当前位置:  编程技术>c/c++/嵌入式

C++设计模式之工厂方法模式

    来源: 互联网  发布时间:2014-10-29

    本文导语:  问题描述 之前讲到了C++设计模式——简单工厂模式,由于简单工厂模式的局限性,比如:工厂现在能生产ProductA、ProductB和ProductC三种产品了,此时,需要增加生产ProductD产品;那么,首先是不是需要在产品枚举类型中添加新的...

问题描述

之前讲到了C++设计模式——简单工厂模式,由于简单工厂模式的局限性,比如:工厂现在能生产ProductA、ProductB和ProductC三种产品了,此时,需要增加生产ProductD产品;那么,首先是不是需要在产品枚举类型中添加新的产品类型标识,然后,修改Factory类中的switch结构代码。是的,这种对代码的修改,对原有代码的改动量较大,易产生编码上的错误(虽然很简单,如果工程大了,出错也是在所难免的!!!)。这种对代码的修改是最原始,最野蛮的修改,本质上不能称之为对代码的扩展。同时,由于对已经存在的函数进行了修改,那么以前进行过的测试,都将是无效的,所有的测试,都将需要重新进行,所有的代码都需要进行重新覆盖。这种,增加成本,不能提高效率的事情,在公司是绝对不允许的(除非昏庸的PM)。出于种种原因,简单工厂模式,在实际项目中使用的较少。那么该怎么办?怎么办呢?需要对原有代码影响降到最小,同时能对原有功能进行扩展。

UML类图

那么今天介绍的工厂方法模式,就隆重登场了。它只是对简单工厂模式的扩展,在GOF的介绍中,它们是合并在一起的,而我则是单独分开进行讲解的,就是为了区分二者的利弊,便于大家在实际项目中进行更好的把握与应用。工厂方法模式是在简单工厂模式的基础上,对“工厂”添加了一个抽象层。将工厂共同的动作抽象出来,作为抽象类,而具体的行为由子类本身去实现,让子类去决定生产什么样的产品。

如图,FactoryA专心负责生产ProductA,FactoryB专心负责生产ProductB,FactoryA和FactoryB之间没有关系;如果到了后期,如果需要生产ProductC时,我们则可以创建一个FactoryC工厂类,该类专心负责生产ProductC类产品。由于FactoryA、FactoryB和FactoryC之间没有关系,当加入FactoryC加入时,对FactoryA和FactoryB的工作没有产生任何影响,那么对代码进行测试时,只需要单独对FactoryC和ProductC进行单元测试,而FactoryA和FactoryB则不用进行测试,则可省去大量无趣无味的测试工作。

适用场合

工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。

1.在设计的初期,就考虑到产品在后期会进行扩展的情况下,可以使用工厂方法模式;

2.产品结构较复杂的情况下,可以使用工厂方法模式;

由于使用设计模式是在详细设计时,就需要进行定夺的,所以,需要权衡多方面的因素,而不能为了使用设计模式而使用设计模式。

代码实现:

/*
** FileName   : FactoryMethodPatternDemo
** Author    : Jelly Young
** Date     : 2013/11/18
** Description : More information, please go to http://www.
*/
 
#include 
using namespace std;
 
class Product
{
public:
  virtual void Show() = 0;
};
 
class ProductA : public Product
{
public:
  void Show()
  {
    cout

    
 
 

您可能感兴趣的文章:

  • GOF设计模式简介- 责任链模式
  • Java设计模式之适配器模式简介
  • C#设计模式之外观模式介绍
  • Java设计模式之创建者模式简介
  • Java设计模式之中介者模式(Mediator Pattern)简介
  • Java设计模式之责任链模式简介
  • php设计模式之命令模式使用示例
  • 起个贴子,大家伙来归纳一下Java本身设计中的设计模式
  • 各位,市面上有什么设计模式的书么
  • linux网络编程(UDP多播)如何实现Observer设计模式?
  • 讨论facade设计模式。
  • 哪里有《设计模式》中文电子版书
  • 大家可以探讨一下Servlet的设计模式么?
  • 设计模式怎么放到Java类里面???
  • 设计模式是怎样产生的?
  • 请问什么是“设计模式”,有这方面的教材吗?望各位大侠指点指点初学者。谢谢!
  • 在EJB中如何应用设计模式?
  • 【一周话题】请大家介绍一下关于设计模式的实际应用例子
  • C++设计模式类库 Loki
  • 谁有《设计模式》中文电子书?
  • 谁有设计模式的例子例子?
  • C++设计模式之状态模式
  • C++设计模式之抽象工厂模式
  • C++设计模式之原型模式
  • C++设计模式之命令模式
  • C++设计模式之观察者模式
  • C++设计模式之桥接模式
  • C++设计模式之策略模式
  • C++设计模式之外观模式
  • C++设计模式之模板方法模式
  • C++设计模式之职责链模式
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C# 设计模式之Abstract Factory 抽象工厂(概念)
  • PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
  • 如何实现非电子商务的设计模式(不要web层)
  • 谁有Design Patterns Explained (设计模式精解)这本书的电子版?谢谢!!
  • 求设计模式 电子书 高分
  • 在哪可以下载完整的《设计模式》??
  • 哪里有java版的设计模式的电子书下载?
  • 《j2ee设计模式》这本书那有买的?
  • 请问那里有关于设计模式的完整的书下载!!!!
  • 讨论:数据库操作的设计模式
  • 哪有java版的设计模式方面的书可以下载呀?材料也可以呀
  • EJB设计模式-----调查受欢迎的程度
  • 设计模式一问
  • 设计模式---学习笔记2
  • java中多点传送(同一个事件可同时传送给多个监听器对象corejava1例8.6)采用哪种设计模式谢谢
  • 9月20日与《设计模式》作者John Vlissides交流
  • 各位老大,什么叫设计模式?
  • 设计模式之构建(Builder)模式 建造房子实例分析
  • 请问设计模式的问题,谢谢
  • php设计模式之单例模式使用示例
  • java设计模式之单例模式学习
  • Java设计模式之Iterator模式介绍




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3