最近在学设计模式,有些地方不懂请教下大家。比如状态模式,怎么在状态之间任意切换。像 普通 会员 超级会员 普通怎么能够跳跃切换。 还有一个疑问是 状态之间怎么取得或使用其他状态的数据。
如果问的问题有问题麻烦告知
就按你的例子
一个普通会员在使用了某音乐客户端一段时间后变成了穷逼会员,如果一段时间不续费的话又会重新跌会普通会员,不同会员在播放音乐的时候会自动使用不同音质的源。
那么按照一般的做法就是写几个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只是方便你往这个模式上套,实际使用上可能并不是这样)
先谢过了
多多指教
每个状态都有切换到其他的状态的方法 在舞台中根据条件切换
pulic clsss NormalState
{
pulic override void PlayLowQuality()
{
setState(Normal);
播放低品质音乐;
}
pulic override void PlayHigtQuality()
{
}
}
pulic clsss PoorState
{
pulic override void PlayLowQuality()
{
}
pulic override void PlayHigtQuality()
{
setState(Normal);
播放高品质音乐;
}
}
pulic clsss content
{
State state =new State ();
pulic void setState ();
pulic void PlayLowQuality()
{
state.PlayLowQuality();
}
pulic void PlayHigtQuality()
{
state.PlayHigtQuality();
}
}
pulic clsss 舞台
{
content con = new content ();
con.setstate(poor)
if(穷逼会员==con.state)
{
--根据条件 播放
con. PlayHigtQuality()
}
}
感觉不用if判断是不行了 在假如 某个副本 有开始 战斗 结算 三个状态 结算状态怎么取得战斗状态的数据 (如杀怪数量) 可以用中介模式吗
@顾海以北: if这种没什么啊,设计模式可不是为了消除if,如果目标是这个的话那就是设计过度了。