• <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)  編輯 收藏 引用
            2020久久精品国产免费| 免费精品国产日韩热久久| 久久精品国产秦先生| 久久精品视频免费| 亚洲精品国精品久久99热| 久久精品夜夜夜夜夜久久| 国产精品gz久久久| 国产成年无码久久久免费| 久久91精品国产91久久小草| 久久久久亚洲爆乳少妇无 | 亚洲AV无码久久精品色欲| 97久久精品无码一区二区| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 伊人久久五月天| 久久精品国产99国产电影网| 亚洲人成无码www久久久| 久久久中文字幕| 久久夜色精品国产欧美乱| 久久久久久国产精品免费免费| 久久久久亚洲AV无码专区体验| 午夜精品久久久久久影视777| 久久99热狠狠色精品一区| 久久久国产打桩机| 亚洲国产精品综合久久一线| 99久久99久久精品国产片| 久久w5ww成w人免费| 久久天天婷婷五月俺也去| 久久亚洲国产精品123区| 久久精品成人国产午夜| 久久亚洲精品人成综合网| 久久婷婷是五月综合色狠狠| 精品一久久香蕉国产线看播放| 久久成人国产精品二三区| 久久久免费精品re6| 久久精品夜夜夜夜夜久久| 日产精品99久久久久久| 色8久久人人97超碰香蕉987| 狠狠色丁香婷婷久久综合| 亚洲国产成人精品久久久国产成人一区二区三区综 | 欧美久久综合九色综合| 久久91这里精品国产2020|