设计模式之十二:状态模式(State)
来源:互联网 发布:淘宝联盟网站建设 编辑:程序博客网 时间:2024/05/29 14:51
状态模式:
当一个对象的内部状态发生变化时允许改变它的行为。
Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.
状态模式将依赖于状态的行为分离成了各种状态类,每一种特定的转态类只处理单一的行为,并且定义了各种状态之间的转移变迁关系。
UML图:
主要包括:
- Context:定义了客户端需要的接口,操作了一个当前状态类的引用
- State:抽象的状态类,为继承的类定义了一个依赖于当前状态的接口。
- ConcreteState:具体的状态类,每一个子类都实现了特性状态相关的行为。
C++代码如下:
#include <stdlib.h>#include <stdio.h>#include <iostream>class Context;class State{ public: virtual void handle(Context * c)=0;};class Context{ public: void setState(State * s) { state=s; } void request() { state->handle(this); } private: State * state;};class ConcreteStateA:public State{ public: void handle(Context * c);};//注意这里ConcreteStateA和ConcreteStateB之间相互包含,所以需要将handle方法写在类外面。class ConcreteStateB:public State{ public: void handle(Context * c);};void ConcreteStateA::handle(Context * c){ std::cout<<"do something dependended on concreteStateA"<<std::endl; c->setState(new ConcreteStateB());}void ConcreteStateB::handle(Context * c){ std::cout<<"do something dependended on concreteStateB"<<std::endl; c->setState(new ConcreteStateA());}int main(){ Context * c=new Context(); State * sA=new ConcreteStateA(); c->setState(sA); c->request(); c->request(); c->request(); return 0;}
执行结果如下:
具体使用时可以在Context中增加一个成员变量,根据这个成员变量的值在具体的State类之间判断转移关系。
0 0
- 设计模式之十二:状态模式(State)
- 设计模式之(十二、状态模式State)
- JAVA设计模式十二--State(状态模式)
- JAVA设计模式十二:--State(状态模式)
- [设计模式](十二):备忘录模式(Memento)|状态模式(State)
- 设计模式之State(状态)
- 设计模式之状态设计模式,state
- 设计模式学习笔记二十二(State状态模式)
- 设计模式实现(十二)--- 状态模式(State)
- 设计模式之state状态模式
- 设计模式之State Pattern 状态模式。
- Java设计模式之State(状态模式)
- 设计模式之State(状态模式)
- 设计模式之(十七)状态模式State
- 设计模式之状态模式(State Pattern)
- 设计模式之十 --- 状态(State)模式
- 浅学设计模式之状态<state>模式
- 【设计模式】之状态模式(State)
- 命名规范("常用”,“TP”)
- Linux 命令系列之 Grup加密和字符界面分辨率调整(79)
- leetcode Add Two Numbers
- python与内建函数重名
- Leetcode: Triangle
- 设计模式之十二:状态模式(State)
- [镜像制作]VMWare搭建Openstack——Virt-edit命令修改虚拟机镜像
- django如何使用restful风格
- UISprite扩展强化,减少游戏包大小功能及功能扩展【NGUI】
- 显示选择省份的三种列表对话框-列表对话框,单选列表对话框,多选列表对话框
- 单行函数
- 显示指定null值得位置
- [镜像制作]VMWare搭建Openstack——guestfish命令修改虚拟机镜像
- Python标准库:内置函数type(object)