iT邦幫忙

2022 iThome 鐵人賽

DAY 25
0
自我挑戰組

設計模式探索系列 第 25

[Day 25] 狀態模式 (2)

  • 分享至 

  • xImage
  •  

新設計

為了加入這個規則,會發現原本的方法全部都會被改到。那堆if-else都要重新加入新的狀態,可以看看違反了前面提到的哪些規則─ 沒有遵守開放/ 封閉原則,也沒有用到任何物件導向的特性,且狀態的轉換被埋沒在一堆if-else的陳述句中,該封裝的東西也沒被封裝,這種完全沒封好的設計就會導致新的規則加入後,可能直接讓原本的設計出現問題。
因此,比較好的做法應該是把各個狀態各自歸為類別,讓各狀態實作自己的方法,可以這麼做:

  1. 定義 state 介面,並讓所有動作各自為一個方法。
  2. 為每個狀態實作state類別,在對應狀態時就使用該狀態的行為。
  3. 移除所有的條件,將動作委託給state類別。
    而其實以上舊實作了狀態模式,至於狀態模式的定義留待後面再揭曉。

定義並實作 State

依照前面的步驟,來進行實作:

  1. 定義 state 介面,並讓所有動作各自為一個方法。
  2. 為每個狀態實作state類別,在對應狀態時就使用該狀態的行為。
    架構圖如以下:
    https://ithelp.ithome.com.tw/upload/images/20221010/20140096XcfdyMM7v9.png

上一篇
[Day 24] 狀態模式 (1)
下一篇
[Day 26] 狀態模式 (3)
系列文
設計模式探索30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言