State Pattern
允許對象在內部狀態改變時,改變它的行為,對象看起來好像修改了它的類。
Example: 會員制
狀態模式會將類別分為兩類:
分別是情境類別 (Context) 與 狀態類別 (State) 。
當前對象會隨著內部狀態,改變它的行為。
狀態模式涉及了 有限狀態機 (Finite-State Machine) 的概念。
有限個狀態,彼此間因動作而造成狀態轉移的系統,
同一時間內只會表現出一種狀態。
優點:
將狀態類抽離,可讓當前對象複雜的條件判斷簡化。
即消除龐大的條件分支敘述。
缺點:
會製造出許多的小類別。
與其他模式的比較:
[簡單工廠模式]:
簡單工廠模式的物件,創造後行為就不會改變了。
而狀態模式則可能因應其狀態,做出不同的行為。
[策略模式]:
定義算法族,委派給不同的物件。
而狀態模式中的小類別層級,皆可獨立運作。
[單例模式]:
我們可以將 狀態類別 (State) 作成單例模式。
[蠅量模式]:
如果 狀態類別 (State) 不含內在狀態(即只以物件型別來代表狀態的類型),
此時的 狀態類別 (State) 就變成了蠅量模式。
ʕ •ᴥ•ʔ:狀態模式可以內聚不同 function 中的 if/else 或者 switch。