设计模式一日一练:状态模式(State)
2014-05-18 11:34
344 查看
State模式,允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。State模式的一个典型应用是TCP连接,GoF的《设计模式》上有TCP实现的一个简化版本,值得好好研究。这里,我写一个简单的电灯开关例子。
PS. 我的设计模式系列blog,《设计模式》专栏,通过简单的示例演示设计模式,对于初学者很容易理解入门。深入学习请看GoF的《设计模式》。
// state - abstract class State: public Singleton { public: virtual void PressSwitch(Light* light) = 0; virtual const char* GetName() = 0; } // state - on class StateOff; class StateOn: public State { public: virtual void PressSwitch(Light* light); virtual const char* GetName(); } void StateOn::PressSwitch(Light* light) { light->ChangeState(StateOff::Instante()); } const char* StateOn::GetName() { return "StateOn"; } // state - off class StateOff: public State { public: virtual void PressSwitch(Light* light); virtual const char* GetName(); } const char* StateOff::GetName() { return "StateOff"; } void StateOff::PressSwitch(Light* light) { light->ChangeState(StateOn::Instante()); } // context - light class Light { public: Light(); State* GetState(); void PressSwitch(); private: friend class State; void ChangeState(State* state); private: State* state; } Light::Light() { this->state = StateOff::Instance(); } State* Light::GetState() { return this->state; } void Light::PressSwitch() { printf("PressSwitch - from state %s", this->state->GetName()); this->state->PressSwitch(this); printf("PressSwitch - to state %s", this->state->GetName()); } void Light::ChangeState(State* state) { this->state = state; } // test void Test() { Light* light = new Light(); light->PressSwitch(); light->PressSwitch() // todo ... destroy }
PS. 我的设计模式系列blog,《设计模式》专栏,通过简单的示例演示设计模式,对于初学者很容易理解入门。深入学习请看GoF的《设计模式》。
相关文章推荐
- 设计模式之State Pattern 状态模式。
- 设计模式学习笔记(二十二)——State状态
- java设计模式-状态模式(STATE)
- 设计模式之(十九)状态模式(state)
- 设计模式--状态模式(State)
- 设计模式(17)-状态模式(State)
- 设计模式之状态(state)模式
- 设计模式学习总结10 - 行为型5 - State状态模式
- 实战设计模式系列-State(状态)
- 设计模式 - State 模式(状态模式)
- [导入]C#面向对象设计模式纵横谈(22):(行为型模式) State 状态模式.zip(6.24 MB)
- 设计模式----State(状态)
- 设计模式——状态模式(State)
- 设计模式----State(状态)模式
- 设计模式--状态模式(State)
- 设计模式之状态模式(State)
- 设计模式----State(状态)
- 设计模式与泡mm的关系之state状态模式及再思考
- 设计模式之State(状态模式)
- 设计模式(19)-状态模式(State)