设计模式实现(十二)--- 状态模式(State)
2014-07-31 09:52
645 查看
状态模式(state):当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况(也就是if过于多的情况)。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。当然,如果这个状态判断很简单,那么就没必要使用状态模式了。
。。感觉这个设计模式有点作孽啊,用了设计模式比直接if判断还麻烦。不过既然有人设计出这种模式,肯定是有用处的,下面我们一起来学习一下。
![](http://img.blog.csdn.net/20140731094959787?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjgyOTY4Nw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
//状态模式.h
状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂的情况(也就是if过于多的情况)。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化。当然,如果这个状态判断很简单,那么就没必要使用状态模式了。
。。感觉这个设计模式有点作孽啊,用了设计模式比直接if判断还麻烦。不过既然有人设计出这种模式,肯定是有用处的,下面我们一起来学习一下。
//状态模式.h
class Context; class State { public: virtual void Handle(Context *context) = 0; }; class ConcreteStateB : public State { public: void Handle(Context *context); }; class ConcreteStateA : public State { public: void Handle(Context *context); };//状态模式.cpp
#include <stdio.h> #include "状态模式原型.h" static int h = 1; //Context类,维护一个ConcreteState子类的实例,这个实例定义当前的状态 class Context { public: State *state; public: Context(State *state) { this->state = state; } void Request() { state->Handle(this); } }; //ConcreteState类,具体状态,每一个子类实现一个与Context的一个状态相关的行为 状态一般有很多个,此处就不再多列了。囧,还是觉得if else if if 或者 switch case简单一些 void ConcreteStateA::Handle(Context *context) { if(h == 1) { printf("将状态从A转到B\n"); if(context->state != NULL) delete context->state; context->state = new ConcreteStateB(); } else { printf("状态A \n"); } } void ConcreteStateB::Handle(Context *context) { if(h == 0) { printf("将状态从B转到A\n"); if(context->state != NULL) delete context->state; context->state = new ConcreteStateA(); } else { printf("状态B \n"); } } int main() { ConcreteStateA *state = new ConcreteStateA(); Context c(state); h = 1; c.Request(); h = 1; c.Request(); h = 0; c.Request(); h = 0; c.Request(); delete state; return 1; }
相关文章推荐
- JAVA设计模式十二:--State(状态模式)
- 设计模式解析和实现(C++, java)之二十--状态(state)模式
- 设计模式之十二:状态模式(State)
- 《模式——工程化实现及扩展》(设计模式C# 版)《状态模式 State》——“自我检验" 参考答案
- 设计模式之十二:状态模式(State)
- C++实现设计模式 - STATE(状态)—对象行为模式(第二十个)
- 我所理解的设计模式(C++实现)——状态模式(State Pattern)
- 设计模式系列6-----C++实现状态模式(State Pattern)
- [设计模式](十二):备忘录模式(Memento)|状态模式(State) - (两种类状态行为模式)
- 设计模式之(十二、状态模式State)
- 设计模式--状态模式(State)
- 常见设计模式的解析和实现(C++)之十七-State模式
- 设计模式----State(状态)
- java设计模式-状态模式(STATE)
- 设计模式--状态模式(State)
- 设计模式学习总结10 - 行为型5 - State状态模式
- Java设计模式之State(状态模式)
- 设计模式----State(状态)
- 设计模式生活篇: State 看状态吧
- [GoF设计模式]Flyweight模式和State模式的C++实现