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

隨筆-91  評論-137  文章-0  trackbacks-0

狀態(tài)模式

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

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

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

“哪來什么加班費,周末估計是逃不了了。”小菜顯然很疲憊,“經(jīng)歷把每個人每天的工作都排得滿滿的,說做完就可以回家,但是沒有任何一個人可以在下班前完成的,基本都得加班,這就等于是資源加班。我走時還有哥們在加班呢。”

“再急也不能這樣呀,長時間甲苯又沒有加班費,士氣更低落,效率大打折扣。”

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

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

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

#include <stdio.h>

 

static int Hour = 0; // 鐘點

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

 

static void WriteProgram()

{

       if(Hour < 12)

       {

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

       }

       else if(Hour < 13)

       {

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

       }

       else if(Hour < 17)

       {

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

       }

       else

       {

              if(WorkFinished)

              {

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

              }

              else

              {

                     if(Hour < 21)

                     {

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

                     }

                     else

                     {

                            printf("當(dāng)前時間:%d 不行了,睡著了。\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é)了這么長時間的面向?qū)ο箝_發(fā),你怎么還在寫面向過程的代碼呀?”

“啊,我習(xí)慣性思維了,你意思是說要分一個類出來。”

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

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

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

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

#include <stdio.h>

 

class Work

{

public:

       int Hour; // 鐘點

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

 

       void WriteProgram()

       {

              if(Hour < 12)

              {

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

              }

              else if(Hour < 13)

              {

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

              }

              else if(Hour < 17)

              {

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

              }

              else

              {

                     if(WorkFinished)

                     {

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

                     }

                     else

                     {

                            if(Hour < 21)

                            {

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

                            }

                            else

                            {

                                   printf("當(dāng)前時間:%d 不行了,睡著了。\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;

}

方法過長是壞味道。

狀態(tài)模式

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

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

實現(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)前時間:%d 下班回家了\n",w->Hour);

       }

};

 

// 睡眠狀態(tài)

class SleepingState : public State

{

public:

       virtual void WriteProgram(Work* w)

       {

              printf("當(dāng)前時間:%d 不行了,睡著了。\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)前時間:%d 加班哦,疲累之極\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)前時間:%d 下午狀態(tài)還不錯,繼續(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)前時間:%d 餓了,午飯;犯困,午休。\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)前時間:%d 上午工作,精神百倍\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;

}

運行結(jié)果



所有文件打包下載

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

評論:
# re: 狀態(tài)模式 2011-07-03 22:13 | Skill
我暈倒 你這個比喻也太離譜了吧  回復(fù)  更多評論
  
# re: 狀態(tài)模式 2011-07-08 11:08 | song
@Skill
很形象,寫的不錯。
@Skill
  回復(fù)  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            一区二区欧美在线| 国产在线高清精品| 欧美视频在线播放| 国模精品娜娜一二三区| 久久看片网站| 亚洲午夜视频在线观看| 久久人人看视频| 国产精品video| 亚洲日本成人女熟在线观看| 欧美一区二区三区视频免费播放| 欧美成人午夜视频| 欧美在线视频观看| 国产精品乱码人人做人人爱| 亚洲激情黄色| 美女精品在线| 欧美一区影院| 亚洲人成在线免费观看| 欧美a级片网| 久久久精品2019中文字幕神马| 国产精品少妇自拍| 亚洲欧美视频在线观看| 99精品免费| 欧美日韩中文字幕精品| 欧美专区在线| 欧美亚洲一区二区在线| 国产欧美日韩专区发布| 先锋影音久久久| 午夜精品久久久久久久久久久久久| 欧美亚洲成人网| 欧美成人嫩草网站| 国产精品区一区| 在线国产日韩| 欧美福利电影在线观看| 国产精品色在线| 亚洲人成久久| 欧美国产极速在线| 国产精品成人一区二区网站软件| 中文在线资源观看网站视频免费不卡 | 欧美中文字幕久久| 亚洲一区二区三区777| 日韩视频在线一区二区| 欧美午夜免费| 亚洲激情偷拍| 国产精品久久亚洲7777| 91久久线看在观草草青青| 狠狠色综合色区| 亚洲日本一区二区三区| 影音先锋成人资源站| 亚洲肉体裸体xxxx137| 精品粉嫩aⅴ一区二区三区四区| 亚洲第一福利视频| 欧美日韩精品欧美日韩精品| 午夜精品久久久久影视| 欧美精品午夜| 久久精品中文| 欧美精品在线观看91| 午夜欧美理论片| 欧美吻胸吃奶大尺度电影| 亚洲日本一区二区| 99视频在线观看一区三区| 亚洲男人天堂2024| 最新国产乱人伦偷精品免费网站| 久久久久久久国产| 亚洲午夜电影网| 欧美日韩精品系列| 亚洲人精品午夜| 在线一区亚洲| 老牛影视一区二区三区| 亚洲综合精品自拍| 美女主播一区| 久久精品亚洲| 国产精品美女久久| 亚洲欧美日韩成人高清在线一区| 亚洲欧美视频一区| 国产一区二区三区网站| 一区二区三区国产在线观看| 亚洲一区久久久| 国产欧美日韩亚州综合| 久久精品视频在线免费观看| 欧美大色视频| 99国产精品视频免费观看一公开 | 性感少妇一区| 亚洲一区二区三区高清| 国产欧美日韩免费| 久久男人av资源网站| 亚洲福利电影| 午夜精品久久久久久久99黑人| 国产欧美精品xxxx另类| 老色鬼久久亚洲一区二区| 亚洲美女中文字幕| 久久久久国产精品午夜一区| 亚洲国产精品小视频| 久久夜色精品亚洲噜噜国产mv| 欧美国产综合| 欧美v日韩v国产v| 欧美一级一区| 又紧又大又爽精品一区二区| 欧美国产高潮xxxx1819| 亚洲国产成人精品视频| 亚洲欧美日韩一区| 国产精品一区二区你懂得| 一区二区三区.www| 久久先锋影音| 亚洲电影有码| 国产精品久久久久aaaa| 蜜桃精品久久久久久久免费影院| 中文久久精品| 欧美一区二区三区喷汁尤物| 亚洲激情二区| 国产亚洲欧美日韩一区二区| 欧美日韩国产免费| 久久亚洲私人国产精品va媚药 | 亚洲精品国产拍免费91在线| 欧美影院在线播放| 妖精成人www高清在线观看| 国内激情久久| 国产精品一区二区欧美| 欧美日韩国产123| 久久一综合视频| 香蕉亚洲视频| 亚洲一区二区三区免费视频| 久久久久se| 性色av一区二区怡红| 99精品欧美一区二区三区| 1024欧美极品| 今天的高清视频免费播放成人| 国产精品一区二区a| 欧美日韩色婷婷| 欧美一级午夜免费电影| 一区二区三区回区在观看免费视频| 亚洲电影免费观看高清| 欧美成人免费播放| 免费亚洲网站| 免费久久精品视频| 久久午夜激情| 久久久综合视频| 久久人人爽国产| 美女被久久久| 欧美成人在线免费视频| 久久在精品线影院精品国产| 久久精品123| 久久视频一区二区| 免费人成网站在线观看欧美高清| 久久青青草原一区二区| 久久综合狠狠综合久久综青草 | 亚洲精品国产视频| 亚洲乱码视频| 影音先锋在线一区| 在线观看成人av| 亚洲高清三级视频| 亚洲精选大片| 亚洲一区二区免费视频| 亚洲欧美日本国产有色| 欧美一区二区三区成人| 久久不射2019中文字幕| 看片网站欧美日韩| 欧美伊人影院| 麻豆av福利av久久av| 亚洲第一综合天堂另类专| 亚洲精选一区二区| 亚洲电影免费在线| 夜夜躁日日躁狠狠久久88av| 亚洲午夜精品一区二区三区他趣 | 99re这里只有精品6| 亚洲视频碰碰| 久久久久国产一区二区| 免费在线一区二区| 国产精品久久久久久久久免费| 久久在线视频| 欧美视频中文在线看| 韩国三级电影久久久久久| 亚洲日本乱码在线观看| 午夜精品999| 欧美77777| 亚洲一区亚洲| 欧美激情视频一区二区三区免费| 国产精品国产a级| 亚洲国产精品第一区二区三区| 亚洲一区二区三区高清不卡| 久久人人爽爽爽人久久久| 9l国产精品久久久久麻豆| 久久国产视频网| 久久国产精品一区二区三区四区 | 国产精品入口福利| 91久久国产综合久久91精品网站| 香蕉成人伊视频在线观看| 欧美黄免费看| 欧美一区二区观看视频| 欧美日本三区| 亚洲国产岛国毛片在线| 欧美在线高清视频| 亚洲精品影院在线观看| 麻豆成人在线播放| 国产伊人精品| 午夜欧美理论片| 亚洲视频一区二区| 欧美精品亚洲精品| 亚洲大片在线观看| 久久久久久婷| 欧美一区二区三区在线视频|