• <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>
            posts - 183,  comments - 10,  trackbacks - 0
            來自于《大話設計模式》
            狀態模式(State):當一個對象的內在狀態改變時允許改變其行為,這個對象看起來像是改變了其類。

            UML 類圖:


            代碼實現 C++:
              1 #include <iostream>
              2 using namespace std;
              3 
              4 class Work;
              5 class State;
              6 double getHour(Work* w);
              7 void   setState(Work * w, State * s);
              8 bool   getFinish(Work* w);
              9 void   WriteProgramOutside(Work * w);
             10 
             11 class State
             12 {
             13 public:
             14     virtual void WriteProgram(Work * w) = 0;
             15 };
             16 
             17 class RestState : public State
             18 {
             19 public:
             20     virtual void WriteProgram(Work * w)
             21     {
             22         cout << "當前時間:" << getHour(w) << " 點下班回家了。" << endl;
             23     }
             24 };
             25 
             26 class SleepingState : public State
             27 {
             28 public:
             29     virtual void WriteProgram(Work * w)
             30     {
             31         cout << "當前時間:" << getHour(w) << " 點不行了,睡著了。" << endl;
             32     }
             33 };
             34 
             35 class EveningState : public State
             36 {
             37 public:
             38     virtual void WriteProgram(Work * w)
             39     {
             40         if (getFinish(w))
             41         {
             42             setState(w, static_cast<State*>(new RestState));
             43             WriteProgramOutside(w);
             44         }
             45         else
             46         {
             47             if (getHour(w) < 21.0)
             48             {
             49                 cout << "當前時間:" << getHour(w) << " 點 加班哦,疲憊之極。" << endl;
             50             }
             51             else
             52             {
             53                 setState(w, new SleepingState);
             54                 WriteProgramOutside(w);
             55             }
             56         }
             57     }
             58 };
             59 
             60 class AfternoonState : public State
             61 {
             62 public:
             63     virtual void WriteProgram(Work * w)
             64     {
             65         if (getHour(w) < 17.0)
             66         {
             67             cout << "當前時間:" << getHour(w) << " 點 下午狀態還不錯,繼續努力。" << endl;
             68         }
             69         else
             70         {
             71             setState(w, new EveningState);
             72             WriteProgramOutside(w);
             73         }
             74     }
             75 };
             76 
             77 class NoonState : public State
             78 {
             79 public:
             80     virtual void WriteProgram(Work * w)
             81     {
             82         if (getHour(w) < 13.0)
             83         {
             84             cout << "當前時間:" << getHour(w) << " 點 餓了,午飯;犯困,午休。" << endl;
             85         }
             86         else
             87         {
             88             setState(w, new AfternoonState);
             89             WriteProgramOutside(w);
             90         }
             91     }
             92 };
             93 
             94 class ForenoonState : public State
             95 {
             96 public:
             97     virtual void WriteProgram(Work* w)
             98     {
             99         if (getHour(w) < 12.0)
            100         {
            101             cout << "當前時間:" << getHour(w) << " 點 上午工作,精神百倍!" << endl;
            102         }
            103         else
            104         {
            105             setState(w, new NoonState);
            106             WriteProgramOutside(w);
            107         }
            108     }
            109 };
            110 
            111 class Work
            112 {
            113 private:
            114     State * current;
            115     double hour;
            116     bool finish;
            117 public:
            118     double getHour()
            119     {
            120         return hour;
            121     }
            122     void setHour(double h)
            123     {
            124         hour = h;
            125     }
            126     bool getFinish()
            127     {
            128         return finish;
            129     }
            130     void setFinsh(bool f)
            131     {
            132         finish = f;
            133     }
            134     void setState(State * w)
            135     {
            136         delete current;
            137         current = w;
            138     }
            139     void WriteProgram()
            140     {
            141         current->WriteProgram(this);
            142     }
            143     Work()
            144     {
            145         current = new ForenoonState;
            146         finish = false;
            147     }
            148     ~Work()
            149     {
            150         delete current;
            151     }
            152 };
            153 
            154 double getHour(Work * w)
            155 {
            156     return w->getHour();
            157 }
            158 void setHour(Work * w, double h)
            159 {
            160     w->setHour(h);
            161 }
            162 bool getFinish(Work * w)
            163 {
            164     return w->getFinish();
            165 }
            166 void setFinish(Work * w, bool f)
            167 {
            168     w->setFinsh(f);
            169 }
            170 void setState(Work * w, State * s)
            171 {
            172     w->setState(s);
            173 }
            174 
            175 void WriteProgramOutside(Work * w)
            176 {
            177     w->WriteProgram();
            178 }
            179 
            180 int main()
            181 {
            182     Work* emergencyProjects = new Work;
            183     emergencyProjects->setHour(9.0);
            184     emergencyProjects->WriteProgram();
            185     emergencyProjects->setHour(10.0);
            186     emergencyProjects->WriteProgram();
            187     emergencyProjects->setHour(12.0);
            188     emergencyProjects->WriteProgram();
            189     emergencyProjects->setHour(13.0);
            190     emergencyProjects->WriteProgram();
            191     emergencyProjects->setHour(14.0);
            192     emergencyProjects->WriteProgram();
            193     emergencyProjects->setHour(17.0);
            194     emergencyProjects->WriteProgram();
            195 
            196     // emergencyProjects->setFinsh(true);
            197     emergencyProjects->setFinsh(false);
            198 
            199     emergencyProjects->WriteProgram();
            200     emergencyProjects->setHour(19.0);
            201     emergencyProjects->WriteProgram();
            202     emergencyProjects->setHour(22.0);
            203     emergencyProjects->WriteProgram();
            204 
            205     delete emergencyProjects;
            206     return 0;
            207 }
            posted on 2011-04-27 16:39 unixfy 閱讀(224) 評論(0)  編輯 收藏 引用
            亚洲Av无码国产情品久久| 欧美久久久久久午夜精品| 久久久久亚洲AV成人网人人网站| 久久强奷乱码老熟女网站| 久久久久久久精品成人热色戒| 国产精品久久久久无码av| 久久99久久无码毛片一区二区| 久久亚洲AV无码精品色午夜麻豆 | 一本久道久久综合狠狠躁AV| 色欲久久久天天天综合网精品| 色综合合久久天天综合绕视看 | 久久久久久a亚洲欧洲aⅴ | 亚洲精品国产字幕久久不卡| 亚洲狠狠综合久久| 久久精品99久久香蕉国产色戒| 久久天天躁狠狠躁夜夜2020| 97久久精品无码一区二区| 2021国产精品久久精品| 久久久亚洲精品蜜桃臀| 国产真实乱对白精彩久久| 国产99久久精品一区二区| 久久久久久亚洲AV无码专区| 久久精品国产亚洲AV不卡| 久久久综合香蕉尹人综合网| 国产亚州精品女人久久久久久 | 久久影视综合亚洲| 办公室久久精品| AAA级久久久精品无码区| 国内精品伊人久久久久av一坑| 亚洲AV无码久久| 婷婷久久久亚洲欧洲日产国码AV | 亚洲欧美国产精品专区久久 | 久久超碰97人人做人人爱| 久久人人爽人人爽人人片AV不 | 国产91久久综合| 久久精品国产99国产精品| 久久精品中文字幕一区| 久久久久国色AV免费看图片| 久久99热这里只有精品国产| 午夜福利91久久福利| 天堂久久天堂AV色综合|