<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 模式定義 ? ? ? 狀態模式允許對象在內部狀態改變時改變它的行為,對象看起來好像修改了它的類。 ## 模式結構: ![](https://box.kancloud.cn/2016-08-30_57c54593859f1.jpg) Context: 環境定義客戶感興趣的接口 維護一個ConcreteState子類的實例,這個實例定義當前狀態 State: 定義一個接口封裝與Context的一個特定狀態相關的行為 ConcreteState subclasses: 每一子類實現一個與Context的一個狀態相關的行為 ## 舉例: ? ? ? 一個工人一天的時間分為上班,睡覺,干其他事情三個時間段。我們可以用狀態模式來表示一天中在干什么事情。 ## UML設計: ![](https://box.kancloud.cn/2016-08-30_57c54593ddc27.jpg) ## 編程實現及執行結果: ~~~ #include <iostream> using namespace std; class Worker; //類的前置聲明 //狀態類 class State { public: virtual void doing(Worker* w){} }; //工作狀態 class WorkingState: public State { public: void doing(Worker* worker); }; //休息狀態 class SleepingState: public State { public: void doing(Worker* worker); }; //其他狀態 class OtherState : public State { public: void doing(Worker* worker); }; //工人類 class Worker { public: Worker() { state = new WorkingState(); } void setState(State* stat) { state = stat; } double getHour() { return hour; } void setHour(double hou) { hour = hou; } void requestDoing() { state->doing(this); } private: State* state; double hour; }; //各個狀態doing方法的實現 void WorkingState::doing(Worker* worker) { if(worker->getHour() > 8 && worker->getHour() < 16) cout << "WorkingState!" << endl; else { worker->setState(new OtherState()); worker->requestDoing(); } } void SleepingState::doing(Worker* worker) { if(worker->getHour() >= 21 || worker->getHour() < 5) cout << "SleepingState!" << endl; else { worker->setState(new OtherState()); worker->requestDoing(); } } void OtherState::doing(Worker* worker) { if((worker->getHour() >= 5 && worker->getHour() < 8) || (worker->getHour() >= 16 && worker->getHour() < 21)) cout << "SleepingState!" << endl; else if(worker->getHour() >= 21 || worker->getHour() < 5) { worker->setState(new SleepingState()); worker->requestDoing(); } else { worker->setState(new WorkingState()); worker->requestDoing(); } } //客戶代碼 int main() { Worker* pWorker = new Worker(); pWorker->setHour(24); cout << "time 24" << endl; pWorker->requestDoing(); pWorker->setHour(11.5); cout << "time 11.5" << endl; pWorker->requestDoing(); pWorker->setHour(19); cout << "time 19" << endl; pWorker->requestDoing(); delete pWorker; return 0; } ~~~ 執行結果: **time24** **SleepingState!** **time11.5** **WorkingState!** **time19** **SleepingState!** **請按任意鍵繼續. . .**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看