首页 > 其它语言 > 工厂方法 Factory Method 建立对象的实例交给子类

工厂方法 Factory Method 建立对象的实例交给子类

  1. // example12.cpp : Defines the entry point for the console application.  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5.   
  6. /* 
  7. 如果你的应用要动态生成的对象种类繁杂,那还是把他管理起来吧。 
  8. 让专门的工厂来实现这个需求吧,调用只需要告诉工程你要什么, 
  9. 具体如何生成,让别人去做。 
  10. */  
  11.   
  12. //抽象定义一个产品,并让这个产品有表现自己的能力  
  13. class product  
  14. {  
  15. public:  
  16.     virtual void showMyFunction()=0;  
  17. };  
  18.   
  19. //定义一个生产产品的抽象工程,他很厉害,什么都能生产,反正他不具体生产  
  20. class factory  
  21. {  
  22. public:  
  23.     virtual product* createProduce(int criterior)=0;  
  24. };  
  25.   
  26.   
  27. //电视机产品  
  28. class television : public product  
  29. {  
  30. public:  
  31.     void showMyFunction()  
  32.     {  
  33.         printf("you can watch me, and relax yourself\n");  
  34.     };  
  35. };  
  36.   
  37. //洗衣机产品  
  38. class washmachine : public product  
  39. {  
  40. public:  
  41.     void showMyFunction()  
  42.     {  
  43.         printf("you can wash your clothes by my help, save your engery\n");  
  44.     };  
  45. };  
  46.   
  47.   
  48. //具体的工厂你来生产这些东西吧  
  49. class concretefactory : public factory  
  50. {  
  51. public:  
  52.     product* createProduce(int criterior)  
  53.     {  
  54.         product* p = NULL;  
  55.         if (1 == criterior)  
  56.         {  
  57.             p = new television;  
  58.         }  
  59.         else if(2 == criterior)  
  60.         {  
  61.             p = new washmachine;  
  62.         }  
  63.         return p;  
  64.     }  
  65. };  
  66.   
  67. int _tmain(int argc, _TCHAR* argv[])  
  68. {  
  69.     concretefactory fac;  
  70.     //让工程来生产吧, 有需求就给工厂吧,  
  71.     product* TV = fac.createProduce(1);  
  72.     product* WashMachine = fac.createProduce(2);  
  73.   
  74.     //得到产品后你就尽情享受吧,不需要付费的哟。  
  75.     TV->showMyFunction();  
  76.     WashMachine->showMyFunction();  
  77.   
  78.     delete TV;  
  79.     delete WashMachine;  
  80.   
  81.     getchar();  
  82.     return 0;  
  83. }  

本文固定链接: http://www.devba.com/index.php/archives/5306.html | 开发吧

报歉!评论已关闭.