State
#include <iostream>
using namespace std;
#define DESTROY_POINTER(ptr) if (ptr) { delete ptr; ptr = NULL; }
class Context;
class DbState
{
public:
    DbState(Context* pContext) { m_pContext = pContext; }
    virtual void Open()=;
    virtual void Close()=;
    virtual void Read()=;
    virtual void Write()=;
protected:
    Context* m_pContext;
};
class OpenState : public DbState
{
public:
    OpenState(Context* pContext) : DbState(pContext) {}
    void Open() { cout<<"Already open!"<<endl; }
    void Close();
    void Read() { cout<<"Finish Reading"<<endl; }
    void Write() { cout<<"Finish Writing"<<endl; }
};
class CloseState : public DbState
{
public:
    CloseState(Context* pContext) : DbState(pContext) {}
    void Open();
    void Close() { cout<<"Already Closing"<<endl; }
    void Read() { cout<<"Already Closing, Can't read"<<endl; }
    void Write() { cout<<"Already Closing, Can't write"<<endl; }
};
class ReadingState : public DbState
{
public:
    ReadingState(Context* pContext) : DbState(pContext) {}
    void Open() { cout<<"Already Open"<<endl; }
    void Close();
    void Read() { cout<<"Reading, Try again"<<endl; }
    void Write() { cout<<"Reading, Can't write"<<endl; }
};
class WritingState : public DbState
{
public:
    WritingState(Context* pContext) : DbState(pContext) {}
    void Open() { cout<<"Already Open"<<endl; }
    void Close();
    void Read() { cout<<"Writing, Can't read"<<endl; }
    void Write() { cout<<"Writing, Try again"<<endl; }
};
class BusyState : public DbState
{
public:
    BusyState(Context* pContext) : DbState(pContext) {}
    void Open() { cout<<"Already Open"<<endl; }
    void Close() { cout<<"Busy, Can't Close"<<endl; }
    void Read() { cout<<"Busy, Can't read"<<endl; }
    void Write() { cout<<"Busy, Can't write"<<endl; }
};
class Context
{
public:
    Context() : m_pState(NULL) {}
    ~Context() { DESTROY_POINTER(m_pState); }
    void SetState(DbState* pState) { DESTROY_POINTER(m_pState); m_pState = pState; }
    void Open() { m_pState->Open(); }
    void Close() { m_pState->Close(); }
    void Read() { m_pState->Read(); }
    void Write() { m_pState->Write(); }
private:
    DbState* m_pState;
};
void OpenState::Close() { cout<<"Finish closing"<<endl; m_pContext->SetState(new CloseState(m_pContext)); }
void CloseState::Open() { cout<<"Finish Opening"<<endl; m_pContext->SetState(new OpenState(m_pContext)); }
void ReadingState::Close() { cout<<"Finish Closing"<<endl; m_pContext->SetState(new CloseState(m_pContext)); }
void WritingState::Close() { cout<<"Finish Closing"<<endl; m_pContext->SetState(new CloseState(m_pContext)); }
int main(int argc, char *argv[])
{
    Context context;
    context.SetState(new OpenState(&context));
    context.Open();
    context.Close();
    context.Open();
    context.Read();
    context.Write();
    context.Close();
    context.Write();
    context.Open();
    context.Write();
    return ;
}
State的更多相关文章
- 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。
		
异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...
 - react+redux教程(五)异步、单一state树结构、componentWillReceiveProps
		
今天,我们要讲解的是异步.单一state树结构.componentWillReceiveProps这三个知识点. 例子 这个例子是官方的例子,主要是从Reddit中请求新闻列表来显示,可以切换reac ...
 - 设计模式(十二):通过ATM取款机来认识“状态模式”(State Pattern)
		
说到状态模式,如果你看过之前发布的重构系列的文章中的<代码重构(六):代码重构完整案例>这篇博客的话,那么你应该对“状态模式”并不陌生,因为我们之前使用到了状态模式进行重构.上一篇博客我们 ...
 - 2015年软件测试STATE报告
		
STATE OF TESTING 2015 Report 测试职业的地理位置分配 大部分有5年以上工作经验 大部分是Test Leader 测试工程师角色 测试工程师怎么工作的? 测试中的软件 ...
 - React Native props & state
		
今天又敲了一丁点代码,看了一下props和state的用法 原本以为state只是一个状态,但是又阅读了一下原文,才知道state是一组状态,这些状态是开发者自己定义的,都统一在state这个大类底下 ...
 - React Native知识11-Props(属性)与State(状态)
		
一:Props(属性) 大多数组件在创建时就可以使用各种参数来进行定制.用于定制的这些参数就称为props(属性).props是在父组件中指定,而且一经指定,在被指定的组件的生命周期中则不再改变 通过 ...
 - Neural Pathways of Interaction Mediating the Central Control of Autonomic Bodily State 自主神经系统-大脑调节神经通路
		
Figure above: Critchley H D, Harrison N A. Visceral influences on brain and behavior[J]. Neuron, 201 ...
 - React state的使用
		
相对于angular.js的双向数据绑定,React 可以使用State来实现. React 里,只需更新组件的 state,然后根据新的 state 重新渲染用户界面(不要操作 DOM). this ...
 - html5 历史管理onhashchange和state
		
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - ORA-01502: index 'INDEX_NAME' or partition of such index is in unusable state
		
ORA-01502: index 'INDEX_NAME' or partition of such index is in unusable state 原因: 这个错误一般是因为索引状态为UNUS ...
 
随机推荐
- Python补充02 Python小技巧
			
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在这里列举一些我使用Python时积累的小技巧.这些技巧是我在使用Python过程 ...
 - CentOS 安装 Chrome
			
cd /etc/yum.repos.d/ vi google.repo [gogle] name=Google-x86_64 baseurl=http://dl.google.com/linux/ ...
 - JDBC中的事务-Transaction
			
事务-Transaction 某些情况下我们希望对数据库的某一操作要么整体成功,要么整体失败,经典的例子就是支付宝提现.例如我们发起了支付宝到银行卡的100元提现申请,我们希望的结果是支付宝余额减少1 ...
 - Java实现单向链表的增删改查
			
class List<T> { private class Node { private T data; private Node next; private Node(T data) { ...
 - GridControl 继承写法修改自己的GridControl
			
namespace GridControlDemo { class MyGridControl : GridControl { protected override BaseView CreateDe ...
 - UTF-8 GB2321
			
已知:汉字“你”UTF8编码是 0xe4bda0,GBK编码是 0xc4e3,求证. 0xe4bda0 → 2进制11100100 10111101 10100000 → UTF8 3字节111001 ...
 - Codeforces 132E Bits of merry old England 【最小费用最大流】
			
题意: 让你输出长度为n的某个序列,然后给你m个变量. 每次给某个数赋值的代价是 假设赋值a=7那么代价是3,因为7的二进制位中有3个1. 要求最后总代价最小. 输出总共要进行操作的次数,和最小代价. ...
 - [ZOJ 1011] NTA (dfs搜索)
			
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1011 题目大意:在一棵树上,给你起始状态,问你能否到达终止状态. ...
 - EDS 14.0 dtc:commmand not found
			
EDS 14.0在生成dtb文件时,输入命令: dtc -I dts -O dtb -o soc_system.dtb soc_system.dts 出现错误: bash:dtc:command on ...
 - 欧几里得算法与扩展欧几里得算法_C++
			
先感谢参考文献:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html 注:以下讨论的数均为整数 一.欧几里得算法(重点是证 ...