首页 > 其他 > 详细

状态模式

时间:2014-03-13 07:01:41      阅读:415      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
  1 #include "stdio.h"
  2 #include "stdlib.h"
  3 
  4 // 程序员有三种行为:吃饭,睡觉,写代码。
  5 // 程序员有两种状态:生病,健康
  6 class Status
  7 {
  8 public:
  9     virtual void eat() = 0;
 10     virtual void sleep() = 0;
 11     virtual void writeCode() = 0;
 12 };
 13 
 14 // 生病状态
 15 class IllStatus :public Status
 16 {
 17 public:
 18     virtual void eat()
 19     {
 20         printf("小二,来一碗米饭,来一杯热水\n");
 21     }
 22     virtual void sleep()
 23     {
 24         printf("翻来覆去睡不着~~~\n");
 25     }
 26     virtual void writeCode()
 27     {
 28         printf("老大,你饶了我,不想写代码...\n");
 29     }
 30 };
 31 
 32 // 健康状态
 33 class HealthStatus :public Status
 34 {
 35 public:
 36     virtual void eat()
 37     {
 38         printf("小二,来两碗米饭,在来一瓶牛栏山\n");
 39     }
 40     virtual void sleep()
 41     {
 42         printf("呼呼~~~\n");
 43     }
 44     virtual void writeCode()
 45     {
 46         printf("hello,world!\n");
 47     }
 48 };
 49 
 50 // 程序员
 51 class Programmer
 52 {
 53 public:
 54     Programmer()
 55     {
 56         m_pStatus = m_pHealthStatus; // 程序员出来的时候是健康的
 57     }
 58 public:
 59     void eat()
 60     {
 61         m_pStatus->eat();
 62     }
 63     void sleep()
 64     {
 65         m_pStatus->sleep();
 66     }
 67     void writeCode()
 68     {
 69         m_pStatus->writeCode();
 70     }
 71     void setStatus(Status *s)
 72     {
 73         m_pStatus = s;
 74     }
 75     Status* getStatus()
 76     {
 77         return m_pStatus;
 78     }
 79     Status* getIllStatus()
 80     {
 81         return m_pIllStatus;
 82     }
 83     Status* getHealthStatus()
 84     {
 85         return m_pHealthStatus;
 86     }
 87 private:
 88     static Status* m_pIllStatus;//生病状态
 89     static Status* m_pHealthStatus;//健康状态
 90     Status* m_pStatus; // 记录程序员的状态
 91 };
 92 // 这里设置静态的原因是程序员不可能只有一个,所有的程序员共享这两种状态,可以节约内存开销
 93 Status* Programmer::m_pIllStatus = new IllStatus;
 94 Status* Programmer::m_pHealthStatus = new HealthStatus;
 95 
 96 // 模式说明:同一事物的不同状态会有不同的行为结果。对象看起来像是修改了类,实际上只是改变了对象的状态
 97 int main()
 98 {
 99     Programmer p;
100     printf("\n----- 健康状态 ----\n");
101     p.eat();
102     p.sleep();
103     p.writeCode();
104 
105     printf("\n----- 生病状态 ----\n");
106     p.setStatus(p.getIllStatus());
107     p.eat();
108     p.sleep();
109     p.writeCode();
110     system("pause");
111     return 0;
112 }
bubuko.com,布布扣

状态模式,布布扣,bubuko.com

状态模式

原文:http://www.cnblogs.com/dzqdzq/p/3596465.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!