Chinaunix首页 | 论坛 | 博客
  • 博客访问: 349214
  • 博文数量: 63
  • 博客积分: 1412
  • 博客等级: 中尉
  • 技术积分: 648
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-10 23:07
文章分类

全部博文(63)

文章存档

2012年(42)

2011年(21)

我的朋友

分类: C/C++

2012-02-15 10:24:57

简单工厂模式,它的主要特点是需要在工厂类中做判断,从而创造相应的产品。当增加新的产品时,就需要修改工厂类。
可参考如下连接:
 
   例子如下:
  1. /*
  2.  *    简单工厂模式
  3.  */

  4. #include <iostream>

  5. using namespace std;

  6. class Base  //基类
  7. {
  8. public:
  9.     virtual void print()
  10.     {
  11.         cout << "Base show()" << endl;
  12.     };
  13. };

  14. class Derived_A : public Base   //派生类A
  15. {
  16. public:
  17.     void print()
  18.     {
  19.         cout << "Derived_A show()" << endl;
  20.     };
  21. };

  22. class Derived_B : public Base   //派生类B
  23. {
  24. public:
  25.     void print()
  26.     {
  27.         cout << "Derived_B show()" << endl;
  28.     };
  29. };

  30. class Factory   //工厂
  31. {
  32. public:
  33.     Base *CreateApi( int flag );
  34. };

  35. Base *Factory::CreateApi( int flag )
  36. {
  37.     if( 1 == flag )
  38.     {
  39.         return new Derived_A();
  40.     }
  41.     else if ( 2 == flag )
  42.     {
  43.         return new Derived_B();
  44.     }
  45. }

  46. Base *CreateProduction( int flag )
  47. {
  48.     if( 1 == flag )
  49.     {
  50.         return new Derived_A();
  51.     }
  52.     else if ( 2 == flag )
  53.     {
  54.         return new Derived_B();
  55.     }
  56. }

  57. int    main()
  58. {
  59.     Base *p = NULL;
  60.     //Factory f;

  61. //    p = f.CreateApi( 1 );
  62.     p = CreateProduction( 1 );

  63.     p->print();
  64. }
 
   如上代码有个问题,就是在factory工厂类中,调用CreateApi时,每次都要New一个对象,这样很浪费时间和空间,而且是没有必要的。
   所以需要修改factory工厂类。在其Factory()构造函数中创建一个vector对象,vector对象中的元素是具体的Derived_A对象和Derived_B对象。之后在调用CreateApi方式时,就不需要每次都New一个新对象了。
阅读(2941) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~