設計模式3-8:狀態模式

What

在狀態模式(State Pattern)中,類的行爲是基於它的狀態改變的。
在狀態模式中,我們創建表示各種狀態的對象和一個行爲隨着狀態對象改變而改變的 context 對象。

允許對象在內部狀態發生改變時改變它的行爲,對象看起來好像修改了它的類。

Why

對象的行爲依賴於它的狀態(屬性),並且可以根據它的狀態改變而改變它的相關行爲。

  • 封裝了轉換規則。
  • 枚舉可能的狀態,在枚舉狀態之前需要確定狀態種類。
  • 將所有與某個狀態有關的行爲放到一個類中,並且可以方便地增加新的狀態,只需要改變對象狀態即可改變對象的行爲。
  • 允許狀態轉換邏輯與狀態對象合成一體,而不是某一個巨大的條件語句塊。
  • 可以讓多個環境對象共享一個狀態對象,從而減少系統中對象的個數。

How

將各種具體的狀態類抽象出來。

通常命令模式的接口中只有一個方法。而狀態模式的接口中有一個或者多個方法。而且,狀態模式的實現類的方法,一般返回值,或者是改變實例變量的值。也就是說,狀態模式一般和對象的狀態有關。實現類的方法有不同的功能,覆蓋接口中的方法。狀態模式和命令模式一樣,也可以用於消除 if...else 等條件選擇語句。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章