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

隨筆-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>
            久久人人97超碰人人澡爱香蕉| 欧美精品免费在线观看| 欧美www视频在线观看| 久久久精品一区| 国产精品有限公司| 亚洲精品在线三区| 亚洲精品在线电影| 99这里只有久久精品视频| 中文久久乱码一区二区| 性欧美超级视频| 蜜桃久久av| 亚洲美女视频在线观看| 亚洲综合第一| 蜜臀av性久久久久蜜臀aⅴ| 欧美激情aaaa| 国产欧美日韩免费看aⅴ视频| 国产综合婷婷| 一本色道久久| 久久久激情视频| 最新精品在线| 亚洲欧美成aⅴ人在线观看| 久久免费视频观看| 国产精品成人免费| 亚洲第一级黄色片| 亚洲欧美日韩国产综合精品二区| 久久综合电影| 在线午夜精品自拍| 欧美a级一区二区| 国产欧美综合在线| 99视频一区二区三区| 久久久久国产一区二区| 99亚洲一区二区| 久热综合在线亚洲精品| 国产精品永久免费观看| 一区二区不卡在线视频 午夜欧美不卡'| 性久久久久久| 一本久道久久久| 免费精品视频| 黄色小说综合网站| 午夜精品久久久久久久蜜桃app| 欧美国产一区二区| 欧美一区二区私人影院日本| 欧美日韩一区二区国产| 亚洲高清视频在线观看| 欧美一区二区视频在线| 99热精品在线观看| 欧美看片网站| 99国产欧美久久久精品| 欧美国产日本高清在线| 久久精品一区二区三区四区| 国产精品无码永久免费888| 一本久久精品一区二区| 欧美粗暴jizz性欧美20| 久久久免费精品视频| 国内一区二区在线视频观看| 久久精品观看| 欧美在线free| 激情亚洲网站| 免费成人av资源网| 久久婷婷av| 亚洲人体一区| 欧美日韩国产在线观看| 国产精品青草久久| 99精品国产一区二区青青牛奶| 噜噜噜91成人网| 久久色中文字幕| 亚洲福利视频专区| 亚洲国产成人av| 欧美精品在线视频| 在线中文字幕一区| 宅男噜噜噜66一区二区| 国产精品久久77777| 亚洲欧美另类综合偷拍| 亚洲欧美精品伊人久久| 国产亚洲视频在线| 你懂的一区二区| 欧美黑人国产人伦爽爽爽| 日韩亚洲国产精品| 亚洲视频免费在线| 国产又爽又黄的激情精品视频| 久久一二三区| 欧美人成网站| 欧美一区二区三区免费看| 欧美专区福利在线| 亚洲欧洲视频| 亚洲一区黄色| 亚洲国产精品久久久久秋霞不卡| 亚洲片区在线| 国产麻豆精品在线观看| 麻豆9191精品国产| 欧美日韩一级大片网址| 久久精品日产第一区二区| 久久午夜视频| 亚洲综合电影| 久久只精品国产| 亚洲综合久久久久| 久久精品中文字幕一区| 亚洲视频在线视频| 久久久av水蜜桃| 亚洲午夜激情在线| 久久午夜精品| 久久国产一区二区| 欧美日韩裸体免费视频| 久久一二三国产| 国产精品久久久久久久久婷婷| 女同一区二区| 国产日韩专区| 一区二区三区回区在观看免费视频| 国产综合婷婷| 亚洲欧美日韩视频一区| 日韩视频不卡| 久久影院午夜论| 久久久久久久一区| 国产精品高潮呻吟久久| 亚洲国产成人精品女人久久久| 国产一区二区三区在线播放免费观看| 亚洲精品国产拍免费91在线| 伊人久久大香线蕉综合热线| 一区二区三区视频免费在线观看| 亚洲黄色在线观看| 久久久亚洲国产天美传媒修理工 | 亚洲欧美国产高清| 亚洲精品久久7777| 亚洲乱码一区二区| 亚洲精品综合久久中文字幕| 国产日韩精品一区观看| 亚洲视频在线观看视频| 亚洲日韩视频| 久久只精品国产| 猛男gaygay欧美视频| 国产一区亚洲| 欧美亚洲网站| 久久久久一区| 黄色一区二区三区| 久久久久**毛片大全| 久久久激情视频| 伊人狠狠色j香婷婷综合| 久久国产精品99国产精| 久久一二三国产| 一区在线视频| 免费久久99精品国产| 亚洲第一免费播放区| 亚洲人成在线播放| 欧美精品导航| 一区二区国产精品| 欧美亚洲综合网| 国产一区二区欧美| 久久综合激情| 亚洲国产精品成人va在线观看| 亚洲精一区二区三区| 欧美日韩精品三区| 亚洲制服av| 欧美 日韩 国产精品免费观看| 91久久精品美女高潮| 欧美揉bbbbb揉bbbbb| 欧美一乱一性一交一视频| 欧美aⅴ一区二区三区视频| 亚洲三级网站| 国产精品亚洲综合久久| 久久久久久久999精品视频| 亚洲国产欧美国产综合一区| 亚洲特级片在线| 国产一区二区中文字幕免费看| 久久在线视频在线| 一本到12不卡视频在线dvd| 欧美专区第一页| 亚洲日本在线观看| 国产精品亚洲аv天堂网| 久久综合网hezyo| 亚洲视频一区| 亚洲成色777777女色窝| 亚洲女爱视频在线| 亚洲激情电影在线| 国产精品视频xxxx| 欧美福利一区| 久久精品国产第一区二区三区最新章节| 亚洲第一狼人社区| 久久久久综合一区二区三区| 一本色道88久久加勒比精品| 韩国精品久久久999| 国产精品www网站| 免费日韩视频| 欧美影院午夜播放| 亚洲私人影院| 亚洲精选中文字幕| 另类图片国产| 久久aⅴ国产欧美74aaa| 一本久久综合亚洲鲁鲁| 在线观看视频亚洲| 国产日产欧美一区| 国产精品久久久久久久久久直播 | 美女性感视频久久久| 亚洲女女女同性video| 亚洲美女网站| 亚洲激情自拍| 伊人成年综合电影网| 亚洲影视在线播放| 日韩视频中午一区| 亚洲国产天堂久久综合网| 久久亚洲精品一区|