C++设计模式之一:Factrory Pattern

Factory模式的两个最重要的功能:
1)定义创建对象的接口,封装对象的创建;

个人见解:核心的主要部分在于一个具体类上,Factory接收到请求自动判断提供什么产品,但是对于一个factory而言,倘若添加一个新的产品,需要做太多的改动,换句话来说,添加一个新的产品必须改动整个factory工厂

 

 
 
  1. #include <iostream>
  2. using namespace std;
  3. class product
  4. {
  5. public:
  6.  virtual void produce(){};      //具体的实现交给子类的函数;
  7.  virtual void sell(){};
  8.  product(){};
  9.  virtual ~product(){};
  10. };
  11. class conproduct1:public product
  12. {
  13. public:
  14.  void produce()
  15.  {cout<<"Pro conproduct1.."<<endl;}
  16.  void sell()
  17.  {cout<<"Sel conproduct1.."<<endl;}
  18. };
  19. class conproduct2:public product
  20. {
  21. public:
  22.  void produce()
  23.  {cout<<"Pro conproduct2.."<<endl;}
  24.  void sell()
  25.  {cout<<"Sel conproduct2.."<<endl;}
  26. };
  27. class Factory                //具体的操作由factory控制选择
  28. {
  29. public:
  30.  Factory(){}
  31.  static product *Creatproduct(int a)
  32.  {
  33.   if(a==1) {return new conproduct1();}  //生成相对应的pro对象;
  34.   if(a==2) {return new conproduct2();}
  35.  }
  36. };
  37. void main()
  38.  Factory *fac=new Factory();
  39.  (fac->Creatproduct(2))->produce();
  40. }
2)使得具体化类的工作延迟到子类中
 
个人见解:核心在于一个factory的抽象类。相对于1而言,其解决了增加一个新的产品的简单处理,只需要添加一个新的类以及所对应的处理类就能搞定,不需要改变factory工厂。 但是其缺陷在于,只支持一种PRODUCT基类。
 
  1. /*****************/
  2. /*** Product.h ***/
  3. /*****************/
  4. #ifndef _PRODUCT_H
  5. #define _PRODUCT_H
  6. class Product
  7. {
  8. public:
  9.  virtual ~Product()=0;
  10. protected:
  11.  Product();
  12. private:
  13. };
  14. class ConcreatProduct:public Product
  15. {
  16. public:
  17.  ~ConcreatProduct();
  18.  ConcreatProduct();
  19. };
  20. #endif
  21. /*****************/
  22. /** Product.cpp **/
  23. /*****************/
  24. #include "Product.h"
  25. #include
  26. using namespace std;
  27. Product::Product()
  28. {}
  29. Product::~Product()
  30. {}
  31. ConcreatProduct::ConcreatProduct()
  32. {
  33. cout<<"ConcreatProduct.."<
  34. }
  35. ConcreatProduct::~ConcreatProduct()
  36. {}
  37. /*****************/
  38. /** Factory.h ****/
  39. /*****************/
  40. #ifndef _FACTORY_H_
  41. #define _FACTORY_H_
  42. class Product;
  43. class Factory
  44. {
  45. public:
  46.  virtual ~Factory()=0;
  47.  virtual Product* CreateProduct()=0;
  48. protected:
  49.  Factory();
  50. };
  51. class ConcreatFactory:public Factory
  52. {
  53. public:
  54.  ~ConcreatFactory();
  55.  ConcreatFactory();
  56.  Product* CreateProduct();
  57. };
  58. #endif
  59. /*****************/
  60. /** Factory.cpp **/
  61. /*****************/
  62. #include "Factory.h"
  63. #include "Product.h"
  64. #include
  65. using namespace std;
  66. Factory::Factory()
  67. {}
  68. Factory::~Factory()
  69. {}
  70. ConcreatFactory::ConcreatFactory()
  71. {
  72. cout<<"ConcreatFactory..."<
  73. }
  74. ConcreatFactory::~ConcreatFactory()
  75. {}
  76. Product* ConcreatFactory::CreateProduct()
  77. {
  78.  return new ConcreatProduct();
  79. }
  80. /*****************/
  81. /** Main.cpp *****/
  82. /*****************/
  83. #include "Factory.h"
  84. #include "Product.h"
  85. #include
  86. using namespace std;
  87. void main()
  88. {
  89. Factory* fac=new ConcreatFactory();
  90. Product*p=fac->CreateProduct();
  91. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值