網站首頁 編程語言 正文
目錄
1、狀態模式概念
2、模塊職責
3、代碼實現
1、狀態模式概念
State模式也叫狀態模式,是行為設計模式的一種。State模式允許通過改變對象的內部狀態而改變對象的行為,這個對象表現得就好像修改了它的類一樣。
狀態模式主要解決的是當控制一個對象狀態轉換的條件表達式過于復雜時的情況。把狀態的判斷邏輯轉譯到表現不同狀態的一系列類當中,可以把復雜的判斷邏輯簡化。
2、模塊職責
Context:用戶對象
擁有一個State類型的成員,以標識對象的當前狀態;
State:接口或基類
封裝與Context的特定狀態相關的行為;
ConcreteState:接口實現類或子類
實現了一個與Context某個狀態相關的行為。
適用于:對象的行為,依賴于它所處的當前狀態。行為隨狀態改變而改變的場景。
適用于:通過用戶的狀態來改變對象的行為。
3、代碼實現
#include
using namespace std;
class Worker;
class State {
public:
virtual void doSomeThing(Worker *w) = 0;
};
class Worker {
public:
Worker();
int getHour()
{
return m_hour;
}
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);
}
private:
int m_hour;
State *m_currstate;
};
class State1 : public State {
public:
void doSomeThing(Worker *w);
};
class State2 : public State {
public:
void doSomeThing(Worker *w);
};
void State1::doSomeThing(Worker *w) {
if(w->getHour() == 7 || w->getHour() == 8)
{
cout << "eat food!" <getCurrentState();
w->setCurrentState(new State2);
w->getCurrentState()->doSomeThing(w);
}
}
void State2::doSomeThing(Worker *w) {
if(w->getHour() == 9 || w->getHour() == 10)
{
cout << "working!" << endl;
}
else
{
delete w->getCurrentState();
w->setCurrentState(new State1);
cout << "currenttime:" << w->getHour() << endl;
}
}
Worker::Worker() {
m_currstate = new State1;
}
int main(){
Worker *w1 = new Worker;
w1->setHour(7);
w1->doSomeThing();
w1->setHour(9);
w1->doSomeThing();
delete w1;
return 0;
}
原文鏈接:https://fanjufei.blog.csdn.net/article/details/124794664
相關推薦
- 2022-08-22 C++貪心算法處理多機調度問題詳解_C 語言
- 2022-09-08 Pytorch中expand()的使用(擴展某個維度)_python
- 2023-05-05 Python?pip更新的兩種方式詳解_python
- 2022-05-27 C語言實現數獨小游戲_C 語言
- 2022-07-21 windows與Linux查看端口占用并終止端口占用
- 2021-11-25 C++實現截圖截屏的示例代碼_C 語言
- 2022-08-22 Python利用watchdog模塊監控文件變化_python
- 2022-09-06 jquery點擊實現升序降序圖標切換_jquery
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支