設計模式之狀態模式

2021-10-24 22:05:16 字數 1722 閱讀 5020

狀態模式(state pattern)屬於行為模式。它主要用來解決物件在多個狀態轉換時,需要對外輸出不同行為的問題。狀態和行為是一一對應的,狀態之間可以相互轉換。當乙個物件的內在狀態發生改變時,允許改變其行為,這個物件看起來像是改變了類。

context(環境角色):用於維護state例項,這個例項定義當前的狀態。

演示乙個簡單電燈開關的例子,電燈有兩種狀態,乙個是開啟狀態,乙個是關閉狀態。

context:環境角色電燈

package cn.personalweb.state;

public

class

context

public

void

setstate

(state state)

}

state:抽象的狀態

package cn.personalweb.state;

public

inte***ce

state

lightoff:具體的關燈狀態handle中將電燈的狀態設定為關燈狀態

package cn.personalweb.state;

public

class

lightoff

implements

state

@override

public string tostring()

}

lighton:具體的開燈狀態handle中將電燈的狀態設定為開燈狀態

package cn.personalweb.state;

public

class

lighton

implements

state

@override

public string tostring()

}

client:客戶端

package cn.personalweb.state;

public

class

client

}

輸出結果

開燈了...

開燈狀態

關燈了...

關燈狀態

優點

**有很強的可讀性。狀態模式將每個狀態的行為封裝到對應的乙個類中

方便維護。將容易產生問題的 if-else 語句刪除了,如果把每個狀態的行為都放到乙個類中,每次呼叫方法時都 要判斷當前是什麼狀態,不但會產出很多 if-else 語句,而且容易出錯

符合「開閉原則」。容易增刪狀態

缺點會產生很多類。每個狀態都要乙個對應的類,當狀態過多時會產生很多類,加大維護難度

應用場景

當乙個事件或者物件有很多種狀態,狀態之間會相互轉換,對不同的狀態要求有不同的行為的時候, 可以考慮使用狀態模式

設計模式之狀態模式

一 作用 允許乙個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類。其別名為狀態物件 objects for states 狀態模式是一種物件行為型模式。二 例子 狀態抽象類 abstract class state 具體狀態類,每個狀態對應乙個類 class concretestat...

設計模式之 狀態模式

gof 設計模式 中給狀態模式下的定義為 允許乙個物件在其內部狀態改變時改變它 的行為。這個物件看起來似乎修改了它的類。看起來,狀態模式好像是神通廣大 居然能夠 修改自身的類 能夠讓程式根據不同的外部情況來做出不同的響應,最直接的方法就是在程式中將這些可能發生的外部情況全部考慮到,使用 if els...

設計模式之狀態模式

定義 允許乙個物件在其內部狀態變化時改變它的行為,物件看起來似乎修改了它所屬的類。類圖 說明 context表示環境類,它定義了客戶應用程式感興趣的介面,並維護乙個concretestate子類的例項,這個例項用於定義當前狀態 state表示抽象狀態類,它定義了乙個介面以封裝與context的乙個特...