码迷,mamicode.com
首页 > 其他好文 > 详细

23状态模式

时间:2014-09-06 23:53:34      阅读:443      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   ar   for   2014   



1状态模式的核心内容是:

A:状态类

B:工作类

2状态模式的作用:通过状态值自动跳转到要执行的类。

3状态模式具体描述

状态模式:状态模式允许一个对象在其内部状态改变的时候改变行为。

这个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行

为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的

一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,

其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的

子类。当系统的状态变化时,系统便改变所选的子类。

 

MM交往时,一定要注意她的状态哦,在不同的状态时她的行为会有不同,

比如你约她今天晚上去看电影,对你没兴趣的MM就会说“有事情啦”

,对你不讨厌但还没喜欢上的MM就会说“好啊,不过可以带上我同事么?”

,已经喜欢上你的MM就会说“几点钟?看完电影再去泡吧怎么样?”,

当然你看电影过程中表现良好的话,也可以把MM的状态从不讨厌不喜欢变成喜欢哦。

4状态模式类图

bubuko.com,布布扣

5.代码:

#include<iostream>

#include<string>

usingnamespacestd;

//状态模式:状态模式允许一个对象在其内部状态改变的时候改变行为。

//这个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行

//为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的

//一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,

//其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的

//子类。当系统的状态变化时,系统便改变所选的子类。

//

//MM交往时,一定要注意她的状态哦,在不同的状态时她的行为会有不同,

//比如你约她今天晚上去看电影,对你没兴趣的MM就会说“有事情啦”

//,对你不讨厌但还没喜欢上的MM就会说“好啊,不过可以带上我同事么?”

//,已经喜欢上你的MM就会说“几点钟?看完电影再去泡吧怎么样?”,

//当然你看电影过程中表现良好的话,也可以把MM的状态从不讨厌不喜欢变成喜欢哦。

classWork;

classState;

classForenonnState;

 

classState

{

public:

   //准柜台的基类,抽象类

   virtualvoidwriteProgram(Work *) = 0;

};

 

//实施工作的类,根据状态执行不同的操作

classWork

{

public:

   inthour;

   State *current;

   Work();

 

   voidwriteProgram()

   {

       current->writeProgram(this);

   }

};

 

//晚上状态

classEveningState :publicState

{

public:

   voidwriteProgram(Work *w)

   {

       cout <<"当前时间: " << w->hour << "心情很好,在看《明朝那些事儿》,收获很大!" << endl;

   }

};

 

//下午的状态

classAfternoonState :publicState

{

public:

   voidwriteProgram(Work *w)

   {

       if (w->hour < 19)

       {

           cout <<"当前时间:" << w->hour << "下午午睡后,工作还是精神百倍!" << endl;

       }

       else

       {

           w->current = newEveningState();

           w->writeProgram();

       }

   }

};

 

//上午的状态

classForenoonState :publicState

{

public:

   voidwriteProgram(Work *w)

   {

       if (w->hour < 12)

       {

           cout <<"当前时间:" << w->hour << "上午工作精神百倍!" << endl;

       }

       else

       {

           w->current = newAfternoonState();

           w->writeProgram();

       }

   }

};

 

Work::Work()

{

   current =newForenoonState();

}

 

intmain()

{

   Work *w =newWork();

   w->hour = 21;

   //通过状态模式自动跳转到要执行的类

   w->writeProgram();

   cin.get();

   return 0;

}

运行结果如下:

bubuko.com,布布扣

23状态模式

标签:style   blog   http   color   os   io   ar   for   2014   

原文地址:http://blog.csdn.net/tototuzuoquan/article/details/39105549

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!