設計模式 狀態模式

2021-10-21 11:47:05 字數 1855 閱讀 7303

設計模式簡介

設計模式(design pattern)代表了最佳的實踐,通常被有經驗的物件導向的軟體開發人員所採用。設計模式是軟體開發人員在軟體開發過程中面臨的一般問題的解決方案。這些解決方案是眾多軟體開發人員經過相當長的一段時間的試驗和錯誤總結出來的。

設計模式是一套被反覆使用的、多數人知曉的、經過分類編目的、**設計經驗的總結。使用設計模式是為了重用**、讓**更容易被他人理解、保證**可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的,設計模式使**編制真正工程化,設計模式是軟體工程的基石,如同大廈的一塊塊磚石一樣。專案中合理地運用設計模式可以完美地解決很多問題,每種模式在現實中都有相應的原理來與之對應,每種模式都描述了乙個在我們周圍不斷重**生的問題,以及該問題的核心解決方案,這也是設計模式能被廣泛應用的原因。

狀態模式

在狀態模式(state pattern)中,類的行為是基於它的狀態改變的。這種型別的設計模式屬於行為型模式。

在狀態模式中,我們建立表示各種狀態的物件和乙個行為隨著狀態物件改變而改變的 context 物件。

優點:

封裝了轉換規則。

列舉可能的狀態,在列舉狀態之前需要確定狀態種類。

將所有與某個狀態有關的行為放到乙個類中,並且可以方便地增加新的狀態,只需要改變物件狀態即可改變物件的行為。

允許狀態轉換邏輯與狀態物件合成一體,而不是某乙個巨大的條件語句塊。

可以讓多個環境物件共享乙個狀態物件,從而減少系統中物件的個數。

缺點:

狀態模式的使用必然會增加系統類和物件的個數。

狀態模式的結構與實現都較為複雜,如果使用不當將導致程式結構和**的混亂。

狀態模式對"開閉原則"的支援並不太好,對於可以切換狀態的狀態模式,增加新的狀態類需要修改那些負責狀態轉換的源**,否則無法切換到新增狀態,而且修改某個狀態類的行為也需修改對應類的源**。

使用場景:

行為隨狀態改變而改變的場景。

條件、分支語句的代替者。

注意事項:在行為受狀態約束的時候使用狀態模式,而且狀態不超過 5 個。

例項新建乙個狀態介面

public

inte***ce

status

實現這個介面

public

class

start

implements

status

public

void

nowstatus()

}

public

class

stop

implements

status

public

void

nowstatus()

}

新建乙個狀態上下文物件

public

class

context

public

void

getstatus()

}

執行

public

static

void

main

(string[

] args)

把狀態更改為:開始

現在的狀態是:開始

====

====

====

====

====

=把狀態更改為:停止

現在的狀態是:停止

設計模式 狀態模式

狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況,把狀態的判斷邏輯轉移到表示不同狀態的一些列類當中,可以把複雜的判斷邏輯簡化。當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行...

設計模式 狀態模式

1.概述 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。2.解決的問題 主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。3.模式中的角色 3.1 上下文環境 context 它定義了客...

設計模式 狀態模式

描述 允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。通常應用在有好多狀態的流程中。類圖 以下程式模擬糖果機器投幣取糖果的狀態流程。1.定義狀態...