状态模式

意图
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

应用场景
uu

类图

参与者
  • Context
    定义客户感兴趣的接口
    维护一个ConcreteState子类的实例,这个实例定义当前状态
  • State(状态)
    定义一个接口以封装与Context的一个特定状态相关的行为
  • ConcreteState
    每一个具体类实现一个与Context的一个状态相关的行为

代码
//有错误,c++不能在同一个文件中定义相互引用的类
# include  <iostream >
using  namespace std;
//抽象状态类,定义一个接口,
//用来封装与Context的特定状态相关的行为
class State
{
public :
     virtual  void Handle(Context  *pContext)  =  0;
};
class ConcreteStateA : public State
{
public :
     void Handle(Context  *pContext)
    {
         //设置ConcreteStateA的下一个状态是ConcreteStateB
        pContext - >SetState( new ConcreteStateB());
    }
};
class ConcreteStateB : public State
{
public :
     void Handle(Context  *pContext)
    {
         //设置ConcreteStateB的下一个状态是ConcreteStateA
        pContext - >SetState( new ConcreteStateA());
    }
};
//Context类:维护一个ConcreteState子类的实例,
//这个实例定义当前的状态
class Context
{
private :
    State  *pState;
public :
    Context(State  *pState)
    {
         this - >pState  = pState;
    }
     void SetState(State  *pState)
    {
         this - >pState  = pState;
    }
     void Request()
    {
        pState - >Handle( this);
    }
};
int main()
{
    Context  *pContext  =  new Context( new ConcreteStateA());
     //不断请求,更换状态
    pContext - >Request();
    pContext - >Request();
    pContext - >Request();
    pContext - >Request();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值