为了账号安全,请及时绑定邮箱和手机立即绑定

设计模式-状态模式

设计模式-状态模式

海绵宝宝撒 2018-08-13 07:10:49
最近在学设计模式,有些地方不懂请教下大家。比如状态模式,怎么在状态之间任意切换。像 普通 会员 超级会员 普通怎么能够跳跃切换。 还有一个疑问是 状态之间怎么取得或使用其他状态的数据。 
查看完整描述

1 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

就按你的例子

一个普通会员在使用了某音乐客户端一段时间后变成了穷逼会员,如果一段时间不续费的话又会重新跌会普通会员,不同会员在播放音乐的时候会自动使用不同音质的源。

那么按照一般的做法就是写几个if else搞定

if(account.State=Normal)

{

  if(account.PlayTimes>10){

    account.ChangeTo穷逼();

      music.PlayHighQuality();

  }

  else

    music.PlayLowQuality();

}

else if(account.State=穷逼)

{

  if(account.PlayTimes>100){

    music.PlayLowQuality();

    account.ChangeToNormal();

  }else

  music.PlayHighQuality();

}

else

  music.PlayHighQuality();

这种代码嘛,如果放现在我来看其实也能凑合,但如果逻辑复杂了后你可能会看到数不清的大括号,然后任何一次需求变更你就会相当纠结。

如果硬要用状态模式的话,这块就比较容易了,可以直接将这些判断拆到各自的派生类中,外边只需要一个

music.PlayFor(account.State);(这里突出State只是方便你往这个模式上套,实际使用上可能并不是这样)


查看完整回答
反对 回复 2018-08-19
  • 1 回答
  • 0 关注
  • 642 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信