iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0
自我挑戰組

Design Pattern - 無所不在的設計模式系列 第 26

[Day26] Design Pattern - State狀態模式

  • 分享至 

  • xImage
  •  

定義


State is a behavioral design pattern that lets an object alter its behavior when its internal state changes. It appears as if the object changed its class.
--Refactoring Guru

狀態模式是一種行為型設模式,它允許物件在內部狀態改變時改變自身的行為。使其看起來就像改變了它的所屬類別。


--圖片來源: Refactoring Guru

狀態模式通常用在~


狀態模式通常用在以下情境中:

  1. 物件行為的不同狀態:
    當一個物件在不同情況下有不同的行為,而且在運行時需要能夠切換這些行為,狀態模式可以派上用場。
    例如,交通號誌的控制,一個交通號誌可以有紅燈、綠燈、和黃燈三種狀態,每個狀態下燈號的行為不同。

  2. 減少大量的條件判斷:
    當你的程式碼中有大量的if-else或switch-case語句,且這些語句根據物件的狀態而改變,使用狀態模式可以幫助減少這些判斷,使程式碼更加清晰和可維護。

  3. 狀態轉換的靈活性:
    當狀態之間的轉換規則需要根據應用的需求而靈活變化時,狀態模式有助於將轉換邏輯集中在相應的狀態類別中,使其更容易擴展和修改。

  4. 當物件的行為與其狀態有關時:
    如果一個物件的行為與其內部狀態直接相關,且這些狀態在運行時可能改變,狀態模式提供了一個組織這些行為的有效方式。

總之,狀態模式適用於需要管理物件多種狀態,並根據這些狀態改變行為的情境,有助於提高程式碼的可維護性和可擴展性。

狀態模式的元素


狀態模式通常包括以下元素:

翻譯如下:

  • State(狀態):
    這是一個由上下文物件使用的介面。該介面定義了子類別將以自己的方式實作的行為。

  • ConcreteStateA/B/...(具體狀態A/B/...):
    這些將是實現 State介面並提供上下文物件將 使用的功能的 具體類別。每個具體狀態類別提供了適用於上下文對象的單個狀態的行為。

  • Context(上下文):
    這個類別將保存一個提供根據其當前狀態提供行為的具體狀態物件。這個類別會被客戶端使用。

UML



上一篇
[Day25] Design Pattern - Observer觀察者模式
下一篇
[Day27] Design Pattern - Strategy 策略模式
系列文
Design Pattern - 無所不在的設計模式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言