• <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 閱讀(217) 評論(0)  編輯 收藏 引用
            欧洲人妻丰满av无码久久不卡| 韩国免费A级毛片久久| 久久精品国产精品亚洲下载| 久久亚洲精品中文字幕三区| 99久久精品久久久久久清纯| 久久久精品国产| 88久久精品无码一区二区毛片 | 91精品国产综合久久香蕉| 久久99精品国产麻豆蜜芽| 一本色综合网久久| 国内精品久久久久久久亚洲| 亚洲色大成网站www久久九| 久久九九亚洲精品| 亚洲国产精品无码久久| 国产精品伊人久久伊人电影 | 丰满少妇人妻久久久久久| 97精品伊人久久久大香线蕉| 亚洲精品无码久久千人斩| 久久久久久综合一区中文字幕 | 精品视频久久久久| 久久久精品国产sm调教网站 | 久久久久夜夜夜精品国产| 久久99精品久久久大学生| 久久精品成人一区二区三区| WWW婷婷AV久久久影片| 99久久99久久精品国产片果冻| 久久久久亚洲AV成人网| 久久久91精品国产一区二区三区| 久久99国产综合精品女同| 亚洲αv久久久噜噜噜噜噜| 久久久久久久精品成人热色戒| 亚洲七七久久精品中文国产| 久久国产精品国语对白| 国产精品嫩草影院久久| 品成人欧美大片久久国产欧美| 狠狠干狠狠久久| A级毛片无码久久精品免费| 久久97久久97精品免视看| 久久久久亚洲av成人无码电影| 久久综合一区二区无码| 欧美国产精品久久高清|