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

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

狀態(tài)模式

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

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

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

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

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

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

“那你用代碼來實(shí)現(xiàn)一下你說的這些狀態(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)還不錯,繼續(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é)了這么長時(shí)間的面向?qū)ο箝_發(fā),你怎么還在寫面向過程的代碼呀?”

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

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

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

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

工作狀態(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)還不錯,繼續(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;

}

方法過長是壞味道。

狀態(tài)模式

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

實(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)還不錯,繼續(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 閱讀(2816) 評論(2)  編輯 收藏 引用 所屬分類: 設(shè)計(jì)模式

評論:
# re: 狀態(tài)模式 2011-07-03 22:13 | Skill
我暈倒 你這個(gè)比喻也太離譜了吧  回復(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>
            欧美一区二区三区在线观看视频| 一区二区三区四区五区精品视频| 久久久久www| 亚洲一区二区三区乱码aⅴ| 亚洲免费激情| 亚洲美女在线视频| 夜夜爽www精品| 亚洲视频一区在线观看| 亚洲欧美精品在线观看| 久久久久中文| 欧美久久精品午夜青青大伊人| 欧美片网站免费| 国产精品青草久久久久福利99| 国产视频在线观看一区| 尤物九九久久国产精品的分类| 亚洲国产成人精品视频| 亚洲私人影院在线观看| 久久久久久九九九九| 欧美国产日韩一二三区| 99国产精品自拍| 欧美在线视屏| 欧美日韩小视频| 国产一区久久| 在线中文字幕一区| 欧美成人高清视频| 亚洲在线视频| 欧美精品91| 精品动漫3d一区二区三区免费| 一区二区三区高清在线| 免费国产自线拍一欧美视频| 亚洲午夜在线视频| 欧美激情免费在线| 韩国亚洲精品| 午夜精品三级视频福利| 91久久一区二区| 欧美一区二区免费| 国产精品福利在线观看| 日韩一区二区高清| 麻豆精品传媒视频| 午夜激情一区| 国产精品色婷婷| 夜夜嗨一区二区三区| 男人的天堂亚洲在线| 免费在线亚洲欧美| 亚洲无线一线二线三线区别av| 久久久久久尹人网香蕉| 国产精品www网站| 亚洲靠逼com| 免费一区视频| 久久狠狠亚洲综合| 国产美女一区| 午夜亚洲性色福利视频| 在线视频精品一区| 欧美四级在线观看| 一本久久知道综合久久| 亚洲国产片色| 欧美sm视频| 亚洲精品美女在线| 欧美激情久久久久| 美女视频黄免费的久久| 尤物99国产成人精品视频| 久久久国产亚洲精品| 欧美一区二区久久久| 国产亚洲成av人片在线观看桃| 欧美亚洲综合久久| 性欧美暴力猛交另类hd| 国产一区二区三区在线观看网站| 欧美一区二区高清在线观看| 亚洲在线观看| 国产自产女人91一区在线观看| 久久精品二区| 久久爱www久久做| 在线精品亚洲| 亚洲第一在线| 欧美日韩黄色一区二区| 亚洲一区二区三区四区五区黄| 一区二区三欧美| 国产日韩欧美一区二区| 久久露脸国产精品| 欧美mv日韩mv国产网站app| 夜夜嗨av一区二区三区中文字幕| 亚洲九九精品| 国产精品自拍三区| 美脚丝袜一区二区三区在线观看| 欧美成人嫩草网站| 一区二区av在线| 亚洲自拍16p| 亚洲激情第一页| 制服诱惑一区二区| 精品成人在线视频| 一本不卡影院| 黑人巨大精品欧美一区二区| 亚洲国产一二三| 国产区日韩欧美| 亚洲福利精品| 国产农村妇女精品一二区| 男人插女人欧美| 欧美视频一区在线| 久久综合色8888| 欧美日韩国产首页在线观看| 欧美在线网站| 欧美激情一区二区三区在线视频| 欧美一区二区三区免费视| 米奇777在线欧美播放| 亚洲永久免费精品| 男女精品网站| 亚洲视频1区2区| 激情成人综合| 日韩亚洲精品在线| 亚洲福利视频网| 欧美一级黄色网| 亚洲性av在线| 欧美激情亚洲另类| 久热精品视频在线| 国产精品永久免费视频| 亚洲激情视频网站| 在线视频国产日韩| 亚洲欧美视频一区二区三区| 一区二区黄色| 免费在线日韩av| 免费国产一区二区| 韩曰欧美视频免费观看| 亚洲一区二区在线| 中文一区二区| 欧美大色视频| 欧美激情bt| 91久久精品网| 麻豆国产精品777777在线| 久久久亚洲人| 好看的日韩视频| 久久精品一级爱片| 久久夜色精品国产| 尤物九九久久国产精品的分类| 欧美一级片一区| 久久成人免费网| 国产欧美一级| 欧美亚洲免费电影| 久久久久久久久岛国免费| 国产拍揄自揄精品视频麻豆| 亚洲欧美成人网| 久久国产精品色婷婷| 国产亚洲精品成人av久久ww| 性久久久久久久久久久久| 久久久国产精品一区| 黄色成人在线网站| 久久青草久久| 亚洲国产欧美日韩另类综合| 亚洲美女黄色片| 欧美日韩一区二区三区在线观看免| 亚洲日本一区二区三区| 亚洲天堂av综合网| 国产乱码精品1区2区3区| 久久国产视频网| 欧美激情在线狂野欧美精品| 99视频精品在线| 国产精品天天摸av网| 久久久久久久网| 亚洲人永久免费| 午夜精品福利一区二区蜜股av| 国产亚洲欧美日韩美女| 麻豆成人在线播放| 日韩亚洲欧美一区| 久久国内精品自在自线400部| 在线免费观看日本一区| 欧美久久精品午夜青青大伊人| 亚洲一区二区在线免费观看| 蜜桃av综合| 亚洲影视九九影院在线观看| 国产一区二区剧情av在线| 欧美电影免费| 亚洲欧美日韩在线不卡| 亚洲第一福利社区| 欧美一区二区福利在线| 亚洲黑丝一区二区| 国产精品三上| 好看的日韩视频| 亚洲精品网站在线播放gif| 欧美日韩国产高清视频| 欧美在线关看| 夜夜夜久久久| 欧美黄色小视频| 欧美一区久久| 亚洲精品影视| 国内精品国语自产拍在线观看| 欧美激情片在线观看| 欧美在线观看视频| av成人免费在线观看| 免费观看在线综合| 久久精品女人| 午夜精品久久久久| 一区二区三区不卡视频在线观看| 黄色精品一区二区| 国产伦精品一区二区三区在线观看| 欧美大尺度在线观看| 久久久免费观看视频| 亚洲影视在线播放| 日韩性生活视频| 亚洲日本精品国产第一区| 欧美xart系列高清| 麻豆国产精品777777在线|