16 設計模式之狀態模式

2021-10-13 07:18:59 字數 3032 閱讀 8096

對有狀態的物件,把複雜的「邏輯判斷」提取到不同的狀態物件中,允許狀態物件在其內部狀態發生改變時改變其行為。

狀態模式包含以下主要角色。

抽象狀態角色(state):定義乙個介面,用以封裝環境物件中的特定狀態所對應的行為。

具體狀態角色(concrete state):實現抽象狀態所對應的行為。

電梯執行系統,電梯有四種狀態:開門、關門、停止、執行。執行的時候不能開門,開門的時候也不能執行等。

抽象狀態類

package com.hupp.state;

/** * 抽象狀態類

*/public

abstract

class

liftstate

//電梯開啟

public

abstract

void

open()

;//電梯關閉

public

abstract

void

close()

;//電梯執行

public

abstract

void

run();

//電梯停止

public

abstract

void

stop()

;}

環境類

package com.hupp.state;

/** * 環境角色

*/public

class

context

public

void

open()

public

void

close()

public

void

run(

)public

void

stop()

}

電梯四個狀態類

package com.hupp.state;

public

class

closingstate

extends

liftstate

public

static closingstate getinstance()

@override

public

void

open()

@override

public

void

close()

@override

public

void

run(

)@override

public

void

stop()

}

package com.hupp.state;

public

class

openingstate

extends

liftstate

public

static openingstate getinstance()

//當前狀態要執行的方法

@override

public

void

open()

@override

public

void

close()

@override

public

void

run(

)@override

public

void

stop()

}

package com.hupp.state;

public

class

runningstate

extends

liftstate

public

static runningstate getinstance()

@override

public

void

open()

@override

public

void

close()

@override

public

void

run(

)@override

public

void

stop()

}

package com.hupp.state;

public

class

stoppingstate

extends

liftstate

public

static stoppingstate getinstance()

@override

public

void

open()

@override

public

void

close()

@override

public

void

run(

)@override

public

void

stop()

}

客戶端類

優缺點缺點

設計模式 16 狀態模式

狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。解決的問題 當控制乙個物件狀態轉換的條件表示式過於複雜,把狀態的判斷邏輯轉移到表示不同狀態的一系列類中,把複雜的判斷邏輯簡單化。state 抽象狀態類,定義介面以封裝與context乙個特定狀態相關的行為 concer...

16 設計模式 狀態模式

乙個物件想內部狀態類改變時,允許改變其行為。就是把乙個物件的狀態改到一系列狀態類中,在狀態類中控制條件判斷 狀態改變。1 將狀態的行為都封裝都狀態類中,不同的狀態不同的類。2 狀態轉化條件在狀態類中,不會出現狀態隨意變換的問題。3 可拓展性性強。狀態的越多,類越多 1 上下文 維護當前狀態。2 抽象...

設計模式C 實現(16) 狀態模式

分類 軟體設計模式c 實現 2011 08 11 08 45 50人閱讀收藏 舉報 軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式...