行为型模式之状态模式实现
来源:互联网 发布:自动算账软件 编辑:程序博客网 时间:2024/06/05 20:52
概念
状态模式是行为模式的一种。State模式允许通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样。
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转译到表现不同状态的一系列类当中,可以把复杂的判断逻辑简化。
角色和职责
Context:用户对象,拥有一个State类型的成员,以标识对象的当前状态;
State:接口或基类,封装与Context的特定状态相关的行为;
ConcreteState:接口实现类或子类,实现了一个与Context某个状态相关的行为。
适用于:对象的行为,依赖于它所处的当前状态。行为随状态改变而改变的场景。即适用于通过用户的状态来改变对象的行为。
案例
#include <iostream>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_currentstate = 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 << "吃早饭" << endl; } else { //状态1 不满足 要转到状态2 delete w->getCurrentState(); w->setCurrentState(new State2); w->getCurrentState()->doSomwThing(w); }}void State1:doSomeThing(Worker *w){ if(w->getHour() == 9 || w->getHour()==10) { cout << "工作" << endl; } else { //状态2 不满足 要转到状态3 后者恢复到初始化状态 delete w->getCurrentState(); w->setCurrentState(new State1); //恢复到当初状态 cout << "当前时间点:" << w->getHour() << "未知状态" << endl; }}//Worker初始状态Worker:Worker(){ m_currstate = new State1;}#int main(void){ Worker *w1 = new Worker; w1->setHour(7); w1->doSomeThing(); w1->setHour(9); w1->doSomeThing(); delete w1; return 0;}
阅读全文
0 0
- 行为型模式之状态模式实现
- 行为型之状态模式
- 行为型之状态模式
- 设计模式-行为型之状态模式
- 行为型模式-状态
- 状态模式(行为型)
- 状态模式(行为型)
- 行为模式之状态模式(State Pattern)C++实现
- Java设计模式之行为型模式(状态模式)
- 设计模式 行为模式之状态模式
- 设计模式之行为模式---状态模式
- 行为型模式--状态模式
- 行为型模式-状态模式
- 行为型模式--状态模式
- 行为型模式之状态STATE
- 行为型模式之模板模式实现
- 行为型模式之命令模式实现
- 行为型模式之策略模式实现
- application 对象
- PAT甲级 1005
- H5+JS+CSS3 实现圣诞情缘--整体结构篇
- android studio 使用kotlin编写architecture componets的配置问题
- GO语言GOPATH的设置
- 行为型模式之状态模式实现
- 逆向问题记录
- 51Nod-1051 最大子矩阵和【最大子段和+DP】
- django 学习笔记
- 服务器更新css,js后,客户端不更新咋办
- 复习
- mac 卡死进程的重启
- Python模拟浏览器多窗口切换
- 天猫加密代码