• <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 閱讀(215) 評論(0)  編輯 收藏 引用
            91精品国产综合久久精品| 亚洲中文字幕伊人久久无码| 精品午夜久久福利大片| 精品人妻伦九区久久AAA片69| 99久久免费国产精品特黄| 久久综合狠狠综合久久综合88| 国产精品久久久久无码av| 品成人欧美大片久久国产欧美...| 日本亚洲色大成网站WWW久久| 亚洲午夜久久久久久久久久| 精品久久久久久久无码| 久久综合精品国产一区二区三区| 亚洲狠狠婷婷综合久久久久| 久久精品国产黑森林| 久久99亚洲网美利坚合众国| 香蕉久久永久视频| 精品久久综合1区2区3区激情| 亚洲va久久久噜噜噜久久| 日韩AV毛片精品久久久| 久久国产乱子精品免费女| 久久午夜福利无码1000合集| 99久久精品无码一区二区毛片| 天堂久久天堂AV色综合| 久久久久久精品无码人妻| 久久AAAA片一区二区| 国产精品毛片久久久久久久| 综合久久国产九一剧情麻豆| 久久最新免费视频| 日韩va亚洲va欧美va久久| yellow中文字幕久久网| 国产精品久久久久影院嫩草| 久久久噜噜噜久久熟女AA片| 亚洲综合伊人久久大杳蕉| 欧美日韩久久中文字幕| 免费无码国产欧美久久18| 久久久久久久免费视频| 久久妇女高潮几次MBA| 99精品久久精品一区二区| 日韩精品久久久久久免费| 久久国产精品无码HDAV| 97精品国产91久久久久久|