天天看點

行為型設計模式: 狀态模式(State Pattern)行為型設計模式: 狀态模式(State Pattern)

行為型設計模式: 狀态模式(State Pattern)

CSDN專欄: 設計模式(UML/23種模式)

狀态模式(State Pattern): 允許一個對象在其内部狀态改變時改變它的行為。對象看起來似乎修改了它的類。

狀态模式(State Pattern)屬于行為型模式。行為型模式涉及到算法和對象間職責的配置設定;行為型模式不僅描述對象或類的模式,還描述它們之間的通信模式。行為型模式刻劃了在運作時難以跟蹤的複雜的控制流;它們将你的注意力從控制流轉移到對象間的聯系方式上來。行為型模式主要包括:Chain of Responsibility模式、Command模式、Interpreter模式、Iterator模式、Mediator模式、Memento模式、Observer模式、State模式、Strategy模式、Template Method模式和Visitor模式。行為型模式在某種程度上具有相關性。

模式簡介

GOF的《設計模式》指出State模式的意圖是:

允許一個對象在其内部狀态改變時改變它的行為。對象看起來似乎修改了它的類。

考慮一個表示網絡連接配接的類TCPConnection。TCPConnection對象的狀态處于若幹不同狀态之一: 連接配接已建立(Established)、正在監聽(Listening)、連接配接已關閉(Closed)。當一個TCPConnection對象收到其他對象的請求時 , 它根據自身的目前狀态作出不同的反應。狀态模式的關鍵思想是引入了一個稱為TCPState的抽象類來表示網絡的連接配接狀态。TCPState類為各表示不同的操作狀态的子類聲明了一個公共接口。 TCPState的子類實作與特定狀态相關的行為。

State模式适用于以下場景:

  • 對象的行為取決于它的狀态, 并且它必須在運作時刻根據狀态改變它的行為。
  • 對象包含大量條件分支語句,并通過枚舉和分支語句處理不同狀态的行為。
  • State模式将每個狀态封裝在獨立的類中。這一對象可以不依賴于其他對象而獨立變化。

模式圖解

State模式的UML示例如下:

行為型設計模式: 狀态模式(State Pattern)行為型設計模式: 狀态模式(State Pattern)

State模式的工作過程如下:

  • Context環境類(諸如: TCPConnection)定義客戶感興趣的接口。其維護ConcreteState的執行個體,表示目前狀态。
  • State狀态類(諸如: TCPState)定義一個接口以封裝與Context的一個特定狀态相關的行為。
  • ConcreteState具體狀态子類(諸如:如TCPEstablished, TCPListen, TCPClosed), 子類實作一個與Context相關的行為。

State模式的有益效果如下:

  • 它将與特定狀态相關的行為局部化, 并且将不同狀态的行為分割開來State模式将所有與一個特定的狀态相關的行為都放入一個對象中。避免了大量的宏定義和分支操作。
  • 它使得狀态轉換顯式化。
  • 在不同的Context對象之間可以共享State對象。

Flyweight模式解釋了何時以及怎樣共享狀态對象。狀态對象通常是定義為Singleton。

模式執行個體

Johnson和Zweig描述了State模式以及它在TCP連接配接協定上的應用。

系列文章

  • CSDN專欄: 設計模式(UML/23種模式)
  • Github專欄: 設計模式(UML/23種模式)

參考文獻

  • GOF的設計模式:可複用面向對象軟體的基礎
  • 設計模式之禅
  • 圖說設計模式

繼續閱讀