日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

23种设计模式C++源码与UML实现--状态模式

發布時間:2025/3/15 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 23种设计模式C++源码与UML实现--状态模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

狀態模式

State模式也叫狀態模式,是行為模式的一種,State模式允許通過改變對象的內部狀態而改變對象的行為,這個對象變現的好像修改了它的類一樣。

狀態模式主要解決的事當控制一個對象狀態的條件表達式過于復雜時的情況。把狀態的判斷邏輯轉移到變現不同的一系列類當中,可以把復雜的判斷邏輯簡化。

角色和職責

Context用戶對象

擁有一個State類型的成員,以標識對象的當前狀態

State接口或基類

封裝與Context的特定狀態相關的行為

ConcreteState接口實現類或子類

實現一個與Context某個狀態相關的行為

適用于:對象的行為,依賴于它所處的當前狀態。行為隨著狀態而改變的場景

適用于,用戶通過狀態來改變對象的行為。

// // Created by andrew on 2020/11/29. // #include <iostream>using namespace std;class Worker;class State { public:virtual ~State() = default;virtual void doSomeThing(Worker *w); };void State::doSomeThing(Worker *w) {}class Worker { public:Worker();void setHour(int hour) {m_hour = hour;}State *getCurrentState() {return m_currState;}void setCurrentState(State *state) {m_currState = state;}void doSomeThing() {m_currState->doSomeThing(this);}public:int getHour() const {return m_hour;}private:int m_hour{};State *m_currState{}; // 對象當前狀態 };class State1 : public State { public:void doSomeThing(Worker * w) override; };class State2 : public State { public:void doSomeThing(Worker * w) override; };void State1::doSomeThing(Worker *w) {if(w->getHour() == 7 || w->getHour() == 0){cout << "morning " << endl;}else{delete w->getCurrentState();w->setCurrentState(new State2); // 狀態1不滿足,轉到狀態2w->getCurrentState()->doSomeThing(w);} }void State2::doSomeThing(Worker *w) {if(w->getHour() == 9 || w->getHour() == 10){cout << "work" << endl;}else{delete w->getCurrentState(); // 狀態2不滿足轉到狀態w->setCurrentState(new State1);cout << "當錢時間點:" << w->getHour() << "unkonwn" << endl;} }Worker::Worker() {m_currState = new State1; }int main(int argc, char *argv[]) {auto *w1 = new Worker;w1->setHour(7);w1->doSomeThing();w1->setHour(9);w1->doSomeThing();delete w1;cout << "state demo" << endl;return 0; }

總結

以上是生活随笔為你收集整理的23种设计模式C++源码与UML实现--状态模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。