C++ 设计模式之状态模式的使用
2015-04-19 17:29
197 查看
状态模式
(State Pattern)是设计模式的一种,属于行为模式。定义
(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。
意图
允许一个对象在其内部状态改变时改变它的行为适用场景
1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。2.一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
状态模式uml类图
以下为C++代码实现:
头文件 #ifndef __STATE_H__ #define __STATE_H__ #include "Context.h" #include <iostream> class Context; class BaseState { public: virtual void Handle(Context* context) = 0; }; class ConcreteStateA : public BaseState { public: void Handle(Context* context); }; class ConcreteStateB : public BaseState { public: void Handle(Context* context); }; #endif 源文件 #include "State.h" void ConcreteStateA::Handle(Context* context) { std::cout << "当前状态是:A" << std::endl; context->setState(new ConcreteStateB()); } void ConcreteStateB::Handle(Context* context) { std::cout << "当前状态是:B" << std::endl; context->setState(new ConcreteStateA()); }
头文件 #ifndef __CONTEXT_H__ #define __CONTEXT_H__ #include "State.h" #include <iostream> class BaseState; class Context { public: Context(BaseState* state); ~Context(); void setState(BaseState* state); BaseState* getState(); void request(); public: BaseState* m_state; }; #endif 源文件 #include "Context.h" Context::Context(BaseState* state) { this->m_state = state; } Context::~Context() { } void Context::setState(BaseState* state) { this->m_state = state; } BaseState* Context::getState() { return this->m_state; } void Context::request() { m_state->Handle(this); }
应用代码
#include "State.h" #include "Context.h" #include <iostream> int main() { Context* context = new Context(new ConcreteStateA()); context->request(); context->request(); context->request(); context->request(); std::cout << "Hello World" << std::endl; return 0; }
结果如下所示:
当前状态是:A
当前状态是:B
当前状态是:A
当前状态是:B
相关文章推荐
- 设计模式C++学习笔记之十九(State状态模式)
- 设计模式C++实现(16)——状态模式
- 设计模式C++实现(16)——状态模式
- 设计模式系列6-----C++实现状态模式(State Pattern)
- 设计模式C++学习笔记之十九(State状态模式)
- 设计模式C++描述----16.状态(State)模式
- c++设计模式之状态模式
- C++设计模式之二十:State(状态模式)
- 设计模式C++实现(16)——状态模式
- c++设计模式之状态模式
- 设计模式C++实现(16) 状态模式
- 设计模式C++学习笔记之十九(State状态模式)
- c++设计模式之状态模式
- 设计模式之状态模式,C++实现
- 设计模式C++实现(16)——状态模式
- 使用C++实现设计模式(连载): 第一回 Singleton 单例模式
- 使用C++实现设计模式(连载): 第二回 Factory 工厂模式
- Head First 设计模式 (十) 状态模式(State pattern) C++实现
- C++设计模式-State状态模式
- 设计模式C++描述----16.状态(State)模式