亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

設計模式-狀態模式

設計模式-狀態模式

海綿寶寶撒 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 關注
  • 711 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號