Chinaunix首页 | 论坛 | 博客
  • 博客访问: 166862
  • 博文数量: 71
  • 博客积分: 165
  • 博客等级: 入伍新兵
  • 技术积分: 431
  • 用 户 组: 普通用户
  • 注册时间: 2011-11-17 00:35
文章分类
文章存档

2013年(3)

2012年(68)

分类:

2012-11-09 13:21:26

construct.h

点击(此处)折叠或打开

  1. /*
  2.  * construct.h
  3.  *
  4.  * Created on: Sep 20, 2012
  5.  * Author: hl
  6.  */

  7. #ifndef _CONSTRUCT_H_
  8. #define _CONSTRUCT_H_
  9. #include <string>
  10. #include <vector>

  11. using namespace std;

  12. /**
  13.  * @brief 建造者模式,定义一系列过程,由派生类去实现;同时自己提供一个该一系列过程的结果...
  14.  * 自己调用自己,同时调用的实现由派生类去做;就像父类调用派生类....
  15.  * 然后实现一个定义调用动作顺序的向量。
  16.  */
  17. class Template
  18. {
  19. public:
  20.     Template()
  21.     {
  22.         vecs.empty();
  23.     }
  24.     ~Template()
  25.     {
  26.         vecs.empty();
  27.     }
  28. protected:
  29.     virtual void OpenFire() = 0;
  30.     virtual void Cleanpan() = 0;
  31.     virtual void Cook() = 0;
  32. public:
  33.     void Sequence(string nowDo);    /// < 可以多次调用,实现多种组合;记得如果连续使用,最后清空下!
  34.     void DoFood();
  35. private:
  36.     vector<string> vecs;
  37. };

  38. /**
  39.  * @brief 男孩做饭 - 独家秘方
  40.  */
  41. class Boy : public Template
  42. {
  43. private:
  44.     void OpenFire();
  45.     void Cleanpan();
  46.     void Cook();
  47. };

  48. #endif /* _CONSTRUCT_H_ */
construct.cpp

点击(此处)折叠或打开

  1. //============================================================================
  2. // Name : construct.cpp
  3. // Author : hl
  4. // Version :
  5. // Copyright : Copyright (c) 2012 Tiros
  6. // Description : Constructer Model in C++, Ansi-style
  7. //============================================================================

  8. #include <iostream>
  9. #include "construct.h"
  10. using namespace std;

  11. #define FIRE "Fire"
  12. #define CLEAN "Clean"
  13. #define COOK "Cook"

  14. void Template::Sequence(string nowDo)
  15. {
  16.     if (nowDo.empty())
  17.         return ;
  18.     vecs.push_back(nowDo);
  19. }

  20. void Template::DoFood()
  21. {
  22.     vector<string>::iterator iter = vecs.begin();
  23.     for(; iter != vecs.end(); iter++)
  24.     {
  25.         if (FIRE == *iter)    /// < C++字符串的比较
  26.             OpenFire();
  27.         if (CLEAN == *iter)
  28.             Cleanpan();
  29.         if (COOK == *iter)
  30.             Cook();
  31.     }
  32. }

  33. void Boy::OpenFire()
  34. {
  35.     cout << "打开火" << endl;
  36. }

  37. void Boy::Cleanpan()
  38. {
  39.     cout << "洗锅" << endl;
  40. }

  41. void Boy::Cook()
  42. {
  43.     cout << "烧饭" << endl;
  44. }

  45. int main()
  46. {
  47.     Template * pTemplate = new Boy();
  48.     pTemplate->Sequence(FIRE);
  49.     pTemplate->Sequence(COOK);
  50.     pTemplate->Sequence(CLEAN);
  51.     pTemplate->DoFood();
  52.     delete pTemplate;

  53.     return 0;
  54. }

阅读(434) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~