状态模式

状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
说明:
这个模式将状态封装成独立的类,并将动作委托到代表当前状态的对象,我们知道行为会随着内部状态而改变。从使用该对象的客户看来,如果说你使用的对象能够完全改变它的行为,那么你会觉得,这个对象实际上是从别的类实例化而来的。

例子:
基于headfirst设计模式的例子
糖果机有四个状态:SoldState,SoldOutState,NoQuarterState,HasQuarterState。
开始的设计:
这四个状态分别定义为0,1,2,3。糖果机内部有个state,用于表示当前处于哪个状态。
当不同动作(投入硬币)时,用if语句对不同state状态做出相应。

 if (state == SoldState) {
      ....
 }

现在糖果机加入一个新规则
随机赠送多一个糖果,获得这个资格的成为赢家。要实现这个功能,首先需要在糖果机增加一个赢家状态。然后必须每个方法中加入一个新的if条件判断“赢家状态”,这可够忙的了。turnCrack()尤其会变得一团乱,因为必须加上随机代码判断是否进入赢家状态,还是进入销出状态。这样的代码设计原则不合理,可以用状态模式解决这个问题。

将五个状态分别变为状态对象,每个对象都有对相应动作的处理能力,这样子当糖果机投入硬币时,只需要调用
state.insertQuarter(),如果state是SoldState对象,那么相应的处理应该是输出到控制台,提示客户不要急,正在弹出糖果中。
总而言之,不同状态对不同动作能响应,有些响应包括将state设置为下一步的状态。这样子就如状态模式所说的,行为会随着内部状态而改变,因为不同state对投入硬币这一行为的相应是不同的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值