青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-91  評(píng)論-137  文章-0  trackbacks-0

狀態(tài)模式

“小菜,你們的加班沒完沒了了?”大鳥為晚上十點(diǎn)才到家的小菜打開了房門。

“嗨,沒辦法,公司的項(xiàng)目很急,所以要求要加班。”

“有這么急嗎?這星期四天來(lái)你都在加班,有加班費(fèi)嗎?難道周末也要繼續(xù)?”

“哪來(lái)什么加班費(fèi),周末估計(jì)是逃不了了。”小菜顯然很疲憊,“經(jīng)歷把每個(gè)人每天的工作都排得滿滿的,說(shuō)做完就可以回家,但是沒有任何一個(gè)人可以在下班前完成的,基本都得加班,這就等于是資源加班。我走時(shí)還有哥們?cè)诩影嗄亍?#8221;

“再急也不能這樣呀,長(zhǎng)時(shí)間甲苯又沒有加班費(fèi),士氣更低落,效率大打折扣。”

“可不是!上午剛上班的時(shí)候,效率很高,可以寫不少代碼,到了中午,午飯一吃完,就犯困,可能是最近太累了,但還不敢休息,因?yàn)闆]人趴著睡覺的,都說(shuō)項(xiàng)目急,要抓緊。所以我就這么迷迷糊糊的,到了下午三點(diǎn)多才略微精神點(diǎn),本想著今天任務(wù)還算可以,希望能早點(diǎn)完成,爭(zhēng)取不要再加班了。哪知快下班時(shí)才發(fā)現(xiàn)有一個(gè)功能是我理解有誤,其實(shí)比想想的要復(fù)雜得多。嗨!苦呀,又多花了三個(gè)多鐘頭,九點(diǎn)多才從公司出來(lái)。”

“那你用代碼來(lái)實(shí)現(xiàn)一下你說(shuō)的這些狀態(tài)吧。”

工作狀態(tài)-函數(shù)版

#include <stdio.h>

 

static int Hour = 0; // 鐘點(diǎn)

static bool WorkFinished = false; // 任務(wù)完成標(biāo)記

 

static void WriteProgram()

{

       if(Hour < 12)

       {

              printf("當(dāng)前時(shí)間:%d點(diǎn) 上午工作,精神百倍\n",Hour);

       }

       else if(Hour < 13)

       {

              printf("當(dāng)前時(shí)間:%d點(diǎn) 餓了,午飯;犯困,午休。\n",Hour);

       }

       else if(Hour < 17)

       {

              printf("當(dāng)前時(shí)間:%d點(diǎn) 下午狀態(tài)還不錯(cuò),繼續(xù)努力\n",Hour);

       }

       else

       {

              if(WorkFinished)

              {

                     printf("當(dāng)前時(shí)間:%d點(diǎn) 下班回家了\n",Hour);

              }

              else

              {

                     if(Hour < 21)

                     {

                            printf("當(dāng)前時(shí)間:%d點(diǎn) 加班哦,疲累之極\n",Hour);

                     }

                     else

                     {

                            printf("當(dāng)前時(shí)間:%d點(diǎn) 不行了,睡著了。\n",Hour);

                     }

              }

       }

}

 

int main()

{

       Hour = 9;

       WriteProgram();

       Hour = 10;

       WriteProgram();

       Hour = 12;

       WriteProgram();

       Hour = 13;

       WriteProgram();

       Hour = 14;

       WriteProgram();

       Hour = 17;

       WriteProgram();

 

       WorkFinished = true;

 

       WriteProgram();

       Hour = 19;

       WriteProgram();

       Hour = 22;

       WriteProgram();

 

       return 0;

}

“小菜,都學(xué)了這么長(zhǎng)時(shí)間的面向?qū)ο箝_發(fā),你怎么還在寫面向過(guò)程的代碼呀?”

“啊,我習(xí)慣性思維了,你意思是說(shuō)要分一個(gè)類出來(lái)。”

“這是起碼的面向?qū)ο笏季S呀,至少應(yīng)該有個(gè)“工作”類,你的‘寫程序’方法是類方法,而‘鐘點(diǎn)’、‘任務(wù)完成’其實(shí)就是類的什么?”

“應(yīng)該是對(duì)外屬性,是吧?”

“問什么問,還不快去重寫。”

工作狀態(tài)-分類版

#include <stdio.h>

 

class Work

{

public:

       int Hour; // 鐘點(diǎn)

       bool WorkFinished; // 任務(wù)完成標(biāo)記

 

       void WriteProgram()

       {

              if(Hour < 12)

              {

                     printf("當(dāng)前時(shí)間:%d點(diǎn) 上午工作,精神百倍\n",Hour);

              }

              else if(Hour < 13)

              {

                     printf("當(dāng)前時(shí)間:%d點(diǎn) 餓了,午飯;犯困,午休。\n",Hour);

              }

              else if(Hour < 17)

              {

                     printf("當(dāng)前時(shí)間:%d點(diǎn) 下午狀態(tài)還不錯(cuò),繼續(xù)努力\n",Hour);

              }

              else

              {

                     if(WorkFinished)

                     {

                            printf("當(dāng)前時(shí)間:%d點(diǎn) 下班回家了\n",Hour);

                     }

                     else

                     {

                            if(Hour < 21)

                            {

                                   printf("當(dāng)前時(shí)間:%d點(diǎn) 加班哦,疲累之極\n",Hour);

                            }

                            else

                            {

                                   printf("當(dāng)前時(shí)間:%d點(diǎn) 不行了,睡著了。\n",Hour);

                            }

                     }

              }

       }

};

 

int main()

{

       Work* emergencyProjects = new Work();

       emergencyProjects->Hour = 9;

       emergencyProjects->WriteProgram();

       emergencyProjects->Hour = 10;

       emergencyProjects->WriteProgram();

       emergencyProjects->Hour = 12;

       emergencyProjects->WriteProgram();

       emergencyProjects->Hour = 13;

       emergencyProjects->WriteProgram();

       emergencyProjects->Hour = 14;

       emergencyProjects->WriteProgram();

       emergencyProjects->Hour = 17;

       emergencyProjects->WorkFinished = false;

       emergencyProjects->WriteProgram();

       emergencyProjects->Hour = 19;

       emergencyProjects->WriteProgram();

       emergencyProjects->Hour = 22;

       emergencyProjects->WriteProgram();

 

       delete emergencyProjects;

 

       return 0;

}

方法過(guò)長(zhǎng)是壞味道。

狀態(tài)模式

狀態(tài)模式主要解決的是當(dāng)控制一個(gè)對(duì)象狀態(tài)轉(zhuǎn)換的條件表達(dá)式國(guó)語(yǔ)復(fù)雜時(shí)的情況。把狀態(tài)的判斷邏輯轉(zhuǎn)移到表示不同狀態(tài)的一系列類當(dāng)中,可以把復(fù)雜的判斷邏輯簡(jiǎn)化。

實(shí)現(xiàn)方式(UML類圖)

實(shí)現(xiàn)代碼

#include <stdio.h>

 

class State;

 

// 工作

class Work

{

public:

       Work();

       ~Work();

      

       void SetState(State* s);

       void WriteProgram();

      

       int Hour;

       bool Finished;

protected:

       State* current;

};

 

// 抽象狀態(tài)

class State

{

public:

       virtual void WriteProgram(Work* w)=0;

};

 

// 下班休息狀態(tài)

class RestState : public State

{

public:

       virtual void WriteProgram(Work* w)

       {

              printf("當(dāng)前時(shí)間:%d點(diǎn) 下班回家了\n",w->Hour);

       }

};

 

// 睡眠狀態(tài)

class SleepingState : public State

{

public:

       virtual void WriteProgram(Work* w)

       {

              printf("當(dāng)前時(shí)間:%d點(diǎn) 不行了,睡著了。\n",w->Hour);

       }

};

 

// 晚間工作狀態(tài)

class EveningState : public State

{

public:

       virtual void WriteProgram(Work* w)

       {

              if(w->Finished)

              {

                     w->SetState(new RestState());

                     w->WriteProgram();

              }

              else

              {

                     if(w->Hour < 21) printf("當(dāng)前時(shí)間:%d點(diǎn) 加班哦,疲累之極\n",w->Hour);

                     else

                     {

                            w->SetState(new SleepingState());

                            w->WriteProgram();

                     }

              }

       }

};

 

// 下午工作狀態(tài)

class AfternoonState : public State

{

public:

       virtual void WriteProgram(Work* w)

       {

              if(w->Hour < 17) printf("當(dāng)前時(shí)間:%d點(diǎn) 下午狀態(tài)還不錯(cuò),繼續(xù)努力\n",w->Hour);

              else

              {

                     w->SetState(new EveningState());

                     w->WriteProgram();

              }

       }

};

 

// 中午工作狀態(tài)

class NoonState : public State

{

public:

       virtual void WriteProgram(Work* w)

       {

              if(w->Hour < 13) printf("當(dāng)前時(shí)間:%d點(diǎn) 餓了,午飯;犯困,午休。\n",w->Hour);

              else

              {

                     w->SetState(new AfternoonState());

                     w->WriteProgram();

              }

       }

};

 

// 上午工作狀態(tài)

class ForenoonState : public State

{

public:

       virtual void WriteProgram(Work* w)

       {

              if(w->Hour < 12) printf("當(dāng)前時(shí)間:%d點(diǎn) 上午工作,精神百倍\n",w->Hour);

              else

              {

                     w->SetState(new NoonState());

                     w->WriteProgram();

              }

       }

};

 

Work::Work()

{

       current = new ForenoonState();

}

 

Work::~Work()

{

       delete current;

}

 

void Work::SetState(State* s)

{

       delete current;

       current = s;

}

 

void Work::WriteProgram()

{

       current->WriteProgram(this);

}

 

int main()

{

       Work* emergencyProjects = new Work();

       emergencyProjects->Hour = 9;

       emergencyProjects->WriteProgram();

       emergencyProjects->Hour = 10;

       emergencyProjects->WriteProgram();

       emergencyProjects->Hour = 12;

       emergencyProjects->WriteProgram();

       emergencyProjects->Hour = 13;

       emergencyProjects->WriteProgram();

       emergencyProjects->Hour = 14;

       emergencyProjects->WriteProgram();

       emergencyProjects->Hour = 17;

       emergencyProjects->Finished = false;

       emergencyProjects->WriteProgram();

       emergencyProjects->Hour = 19;

       emergencyProjects->WriteProgram();

       emergencyProjects->Hour = 22;

       emergencyProjects->WriteProgram();

 

       delete emergencyProjects;

      

       return 0;

}

運(yùn)行結(jié)果



所有文件打包下載

posted on 2011-07-03 22:05 lwch 閱讀(2820) 評(píng)論(2)  編輯 收藏 引用 所屬分類: 設(shè)計(jì)模式

評(píng)論:
# re: 狀態(tài)模式 2011-07-03 22:13 | Skill
我暈倒 你這個(gè)比喻也太離譜了吧  回復(fù)  更多評(píng)論
  
# re: 狀態(tài)模式 2011-07-08 11:08 | song
@Skill
很形象,寫的不錯(cuò)。
@Skill
  回復(fù)  更多評(píng)論
  

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久五月天婷婷| 久久精品国产免费看久久精品| 久久免费精品视频| 影音先锋日韩精品| 久久伊人精品天天| 久久精品一二三| 一区在线免费| 久热国产精品视频| 蜜桃伊人久久| 亚洲国产午夜| 亚洲精品在线免费| 欧美日韩综合在线| 亚洲免费一级电影| 性刺激综合网| 亚洲国产99| 亚洲免费观看高清完整版在线观看| 欧美精品一区二区高清在线观看| 亚洲人屁股眼子交8| 一区二区精品在线| 欧美日韩一区二区视频在线观看| 亚洲一级网站| 亚洲欧美第一页| 影音先锋日韩有码| 日韩视频精品在线| 国产精自产拍久久久久久蜜| 久久综合伊人77777| 欧美成年人视频| 亚洲一区三区电影在线观看| 午夜免费电影一区在线观看 | 中文精品视频一区二区在线观看| 国产精品午夜在线| 亚洲高清激情| 国产欧美精品va在线观看| 免费成人高清视频| 国产精品人人做人人爽| 欧美福利一区二区| 国产日韩欧美亚洲| 欧美二区乱c少妇| 国产精品久久久久久久久久久久| 另类欧美日韩国产在线| 欧美三级在线播放| 另类天堂av| 欧美三日本三级三级在线播放| 久久久99爱| 欧美精品一区二区视频| 欧美诱惑福利视频| 欧美大尺度在线观看| 欧美在线播放| 欧美视频在线免费| 亚洲成人在线网| 狠狠久久婷婷| 亚洲欧美卡通另类91av| 中文国产成人精品久久一| 久久精品亚洲一区| 欧美一区亚洲| 欧美日韩久久久久久| 久久全国免费视频| 国产精品家教| 亚洲精品一区二区三区99| 亚洲国产精品国自产拍av秋霞| 午夜一区二区三区在线观看| 亚洲婷婷在线| 欧美日韩一区二区欧美激情 | 亚洲日本中文字幕| 欧美亚洲免费| 久久精品99国产精品酒店日本| 欧美色区777第一页| 亚洲黑丝在线| 亚洲第一精品夜夜躁人人躁 | 亚洲精品欧美精品| 亚洲欧洲综合另类在线| 久久久久高清| 玖玖玖国产精品| 国产亚洲综合精品| 久久成人羞羞网站| 老**午夜毛片一区二区三区| 国产综合网站| 蜜臀久久99精品久久久久久9 | 久久久久欧美| 在线成人免费观看| 欧美大片第1页| 日韩一区二区福利| 欧美亚洲一区二区在线观看| 国产欧美精品日韩区二区麻豆天美| 亚洲一区视频在线观看视频| 久久九九精品99国产精品| 国产一区二区日韩精品| 久久久青草青青国产亚洲免观| 欧美.日韩.国产.一区.二区| 亚洲人成网站777色婷婷| 欧美精选在线| 亚洲欧美日韩成人| 麻豆成人小视频| av成人老司机| 国产日韩专区| 欧美韩日高清| 亚洲女爱视频在线| 牛夜精品久久久久久久99黑人| 日韩午夜高潮| 国产一区二区日韩精品| 男人的天堂成人在线| 一区二区三区欧美日韩| 久久一区二区三区av| 在线一区二区三区四区| 国产一区在线免费观看| 欧美理论电影在线播放| 亚洲欧美视频一区| 亚洲激情二区| 久久亚洲色图| 亚洲淫片在线视频| 亚洲国产精品第一区二区| 国产精品欧美精品| 欧美国产精品中文字幕| 欧美伊人影院| 亚洲天堂av在线免费| 亚洲国产精品激情在线观看| 欧美综合第一页| 亚洲天堂激情| 亚洲黄色在线视频| 激情欧美丁香| 国产乱肥老妇国产一区二| 欧美国产一区二区在线观看| 久久精品91| 鲁大师影院一区二区三区| 亚洲制服av| 欧美在线视频不卡| 99国产精品私拍| 久久综合五月| 欧美一区二区三区在线免费观看| 亚洲国产导航| 久久一区二区精品| 久久精品水蜜桃av综合天堂| 亚洲欧美国产一区二区三区| 亚洲人在线视频| 亚洲电影在线观看| 国产综合激情| 国产亚洲精品久久飘花| 国产精品每日更新| 欧美性猛交xxxx乱大交蜜桃 | 亚洲一区二区三区中文字幕| 亚洲欧洲一级| 亚洲国产日韩在线| 亚洲国产成人91精品| 欧美粗暴jizz性欧美20| 久久在线免费观看| 久久一区二区精品| 另类欧美日韩国产在线| 免费成人网www| 欧美成人有码| 亚洲国产精品一区二区www在线| 欧美国产免费| 亚洲国产乱码最新视频 | 亚洲综合精品四区| 亚洲一区精品视频| 欧美一区二区精品久久911| 欧美一级久久久| 久久蜜桃精品| 免费国产自线拍一欧美视频| 欧美激情精品久久久六区热门| 欧美韩国在线| 日韩视频一区二区在线观看 | 国产精品婷婷午夜在线观看| 国产九九精品| 一区二区视频免费在线观看 | 国产视频久久网| 国内精品久久国产| 亚洲国产高清一区| 亚洲午夜视频在线观看| 欧美一二区视频| 免费日韩av电影| 日韩视频专区| 欧美一级在线亚洲天堂| 麻豆精品视频在线| 欧美日韩亚洲成人| 国产在线拍揄自揄视频不卡99| ●精品国产综合乱码久久久久| 一本大道久久a久久精品综合| 午夜在线成人av| 欧美顶级艳妇交换群宴| 一区二区三区视频在线看| 久久久久国产精品麻豆ai换脸| 欧美韩日一区二区三区| 国产偷久久久精品专区| 亚洲国产女人aaa毛片在线| 亚洲在线观看视频网站| 另类亚洲自拍| 亚洲视频国产视频| 嫩草国产精品入口| 国产视频综合在线| 中文av一区特黄| 欧美高清在线播放| 亚洲欧美日本另类| 欧美jizzhd精品欧美喷水| 国产伦精品一区二区三区视频黑人| 亚洲国产精品成人va在线观看| 午夜在线播放视频欧美| 免费亚洲一区| 久久99伊人| 国产女精品视频网站免费| 亚洲作爱视频|