Java中的狀態設計模式是一種軟體設計模式,當對象的內部狀態更改時,該模式允許對象更改其行為。狀態設計模式通常用於以下情況:對象取決於其狀態,並且在運行期間必須根據其內部狀態更改其行為。狀態設計模式是許多行為設計模式之一,因此表徵了運行時難以遵循的對象之間的控制流。狀態封裝是管理軟體變更的絕佳方法。在本文中,我們將討論狀態設計模式動機的關鍵方面,描述狀態動機,提及實現該動機的關鍵參與者,並使用代碼示例來演示其用法。
什麼是狀態設計模式?(狀態設計模式實際示例)
在計算機網路中,TCP(傳輸控制協議)是一種用於定義如何建立和維護連接的標準,應用程序可以通過該連接交換數據。TCP連接對象可以處於以下狀態:
- 1.建立狀態
- 2.聆聽狀態
- 3.封閉狀態
TCP(傳輸控制協議)連接對象可以基於其當前狀態來響應請求。狀態設計模式是實現此類方案的理想方式,它可以描述TCP連接在每種狀態下如何表現出不同的行為。通常,該方法是引入一個稱為TCPState的抽象類來表示網路連接的狀態。然後,代表已建立,正在偵聽和已關閉狀態的類將使用TCPState。
我們還可以使用另一個名為Connection的類,該類可用於表示TCP連接的當前狀態。特定於狀態對象的請求由連接類委派,並使用狀態的實例對連接的狀態執行預期的操作。通常,每當更改連接狀態時,Connection對象都會更改其使用的狀態實例。例如,假設我們有3個狀態對象實例來表示已建立狀態,偵聽狀態和關閉狀態,而Connection對象目前正在使用已建立的實例,並且如果發生任何更改,則連接對象可以將已建立的實例替換為TCPState的已關閉實例。
Java示例中的這種狀態設計模式清楚地說明了其意圖,即當內部狀態更改時,對象可以更改其行為。該對象似乎更改了其類。Java中的狀態設計模式用於封裝對象基於其內部狀態的變化行為。
Java中的狀態設計模式示例
在繼續演示Java狀態設計模式的代碼示例之前,讓我們首先了解什麼是我們需要更好理解示例的關鍵類(參與者)。
- 上下文界面
上下文定義一個介面,該介面維護定義當前狀態的ConcreteState子類的實例。
- 狀態界面
狀態定義了一個介面,用於封裝與上下文的特定狀態關聯的行為。
- ConcreteState子類
如前所述,具體狀態子類可以被視為連接對象處於(建立,聆聽或關閉)狀態的實例。它們實現了上下文狀態的行為。
Java示例中的狀態設計模式
我們將演示遊戲開始和暫停功能的高度簡化版本。實現如下:
1. 狀態界面
狀態介面將由不同的狀態類實現,以根據其要求覆蓋doAction方法。這只是不同州的藍圖。

2. StartState類
StartState是一個具體的子類,代表遊戲的「開始狀態」。它覆蓋了從介面繼承的方法,並且還具有一個返回「開始狀態」的字元串的方法。

3. 停止狀態類
停止狀態也是狀態介面的具體子類。唯一的變化是它代表遊戲的「暫停」狀態。

4. 上下文(環境)
如前所述,上下文在我們的案例中維護了ConcreteState子類,StopState或Start狀態的實例。

5. 狀態設計模式演示
將startState.doAction方法傳遞給上下文對象以設置應用程序的當前狀態。然後,上下文的getState方法返回當前狀態,並且具體狀態類內部的toString方法用於執行由當前狀態定義的所需操作。

上下文類將特定於狀態的請求委託給ConcreteState對象(在本例中為startstate / stopstate)。狀態對象通過上下文傳遞為訪問上下文的參數。
在Java狀態設計模式的幫助下,我們獲得了什麼?
- 狀態設計模式Java示例向我們展示了它允許我們根據對象的內部狀態向其添加儘可能多的行為。
- Java中的狀態設計模式將特定於狀態的行為本地化。特定於狀態的代碼位於狀態子類中,這使我們更容易通過定義新的子類來添加新狀態。這意味著我們的代碼可以輕鬆擴展。
- 即使Java中的狀態設計模式可以增加表示不同狀態的類的數量。如果不是這種情況,那麼我們最終將使用大型條件語句來檢查很多事情。在Java中使用狀態設計模式時,我們僅需要確定對象的內部狀態是否已更改。
結論
如果我們對對象的每個狀態有不同的行為,則應使用Java中的狀態設計模式。可能是我們可能需要在運行時配置轉換。它還可以在為遊戲創建GUI時派上用場。在運行時,用戶可能希望為特定級別使用不同的界面,或者遊戲本身可能根據所玩遊戲的級別更改狀態。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/221104.html
微信掃一掃
支付寶掃一掃