[C++设计模式] state 状态模式
来源:互联网 发布:知乎 成都留学机构 编辑:程序博客网 时间:2024/06/06 07:40
《head first 设计模式》中的例子很不错,想制造一个自动交易的糖果机,糖果机有四个状态:投入钱不足,投入钱足够,出售糖果,糖果售罄。糖果机的当前状态处于其中不同的状态时,它针对同一个操作的反映动作也不同。传统面向过程编程会套用if-else对不同的状态下分别处理,逻辑麻烦而且不具有可拓展性。
状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。状态模式的重点在于状态转换,很多时候,对于一个对象的状态,我们都是让这个对象包含一个状态的属性,这个状态属性记录着对象的具体状态,根据状态的不同使用分支结构来执行不同的功能,就像上面的代码那样处理;就像上面说的,类中存在大量的结构类似的分支语句,变得难以维护和理解。状态模式消除了分支语句,就像工厂模式消除了简单工厂模式的分支语句一样,将状态处理分散到各个状态子类中去,每个子类集中处理一种状态,这样就使得状态的处理和转换清晰明确
State类,抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为。
ConcreteState类,具体状态,每一个子类实现一个与Context的一个状态相关的行为。
Context类,维护一个ConcreteState子类的实例,这个实例定义当前的状态。
给出框架,不再实现,比较好理解。
class Context;class State{public: virtual void Handle(Context* pContext)=0; ~State();protected: State();private:};class ConcreteStateA : public State{public: ConcreteStateA(); ~ConcreteStateA(); virtual void Handle(Context* pContext);protected:private:};class ConcreteStateB : public State{public: ConcreteStateB(); ~ConcreteStateB(); virtual void Handle(Context* pContext);protected:private:};class ConcreteStateC : public State{public: ConcreteStateC(); ~ConcreteStateC(); virtual void Handle(Context* pContext);protected:private:};class Context{public: Context(State* pState); ~Context(); void Request(); void ChangeState(State* pState);protected:private: State* _state;};
0 0
- State(状态)设计模式
- 设计模式----State(状态)模式
- 设计模式----State(状态)模式
- 设计模式--状态模式(State)
- [设计模式]state状态模式
- [设计模式]状态模式 (State)
- 设计模式 -- 状态模式(State)
- 设计模式-状态模式(State)
- 设计模式:状态模式-state
- 乐在其中设计模式(C#) - 状态模式(State Pattern)
- 设计模式之状态STATE模式(C++)
- 设计模式-状态模式State-电梯状态
- 设计模式之State(状态)
- 设计模式----State(状态)
- 设计模式之状态设计模式,state
- 设计模式(3)- 状态设计模式State
- 设计模式(17)-状态模式(State)
- 设计模式之state状态模式
- leetcode单链表总结
- 导入 Android v4 包看不到源码的解决办法
- [转]如何测试网页的登录页面
- 动态加载APK原理分享
- 4.根据下面的主类,编写一个立方体类Cube,该类中有求矩形面积area()和体积volume()的方法,而且每种方法都有一个无参的和有参的方法构成过载。
- [C++设计模式] state 状态模式
- poj 2594 Treasure Exploration 【warshall 求传递闭包 + 最小路径覆盖】
- Android招财进宝手势密码的实现
- JAVA的三大变量分析
- Intel平台下Linux中ELF文件动态链接的加载、解析及实例分析
- 一个之前没注意的小知识点1
- flash 调用启动一个.exe文件并向其传递参数的方法
- How to implement growable memory-mapped files (GMMFs) in NTFS
- IPTABLES进阶