對有狀態的物件,把複雜的「邏輯判斷」提取到不同的狀態物件中,允許狀態物件在其內部狀態發生改變時改變其行為。
狀態模式包含以下主要角色。
抽象狀態角色(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人閱讀收藏 舉報 軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式...