狀態模式用來改變物件的行為,當狀態發生變化時,行為也隨著發生變化,和switch分支語句有點類似,比如如下的**:
public
class creatureelse
}//轉換標識
public
void
kiss()
public
static
void
main(string args)
}
greet()方法在業務複雜的時候if else會很多,而替換為狀態模式就變得優雅了許多:
簡單的狀態模式
public
class
creature
private
class
forg
implements
state
}private
class
prince
implements
state
}private state state = new forg();
public
void
greet()
public
void
kiss()
public
static
void
main(string args)
}
在狀態模式中可以有多個狀態,同時對應多個分支程式;
//狀態介面
inte***ce state
//狀態實現類1
class implementation1 implements state
public
void
operation2()
public
void
operation3()
}//狀態實現類2
class implementation2 implements state
public
void
operation2()
public
void
operation3()
}//服務提供者
class serviceprovider
//狀態更改
public
void
changestate(state newstate)
public
void
service1()
public
void
service2()
public
void
service3()
}public
class statedemo
public
static
void
main(string args)
}
狀態模式和**模式有相似之處,都有目標物件和**的相似概念
但是他們之間是有區別的:
1.**模式目標物件只有乙個,而狀態模式可以有多個目標物件,即,多個狀態。
2.**模式是為了控制目標物件的訪問,狀態模式是為了根據狀態或者標示判斷使用哪個目標。
設計模式 狀態模式
狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況,把狀態的判斷邏輯轉移到表示不同狀態的一些列類當中,可以把複雜的判斷邏輯簡化。當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行...
設計模式 狀態模式
1.概述 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。2.解決的問題 主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。3.模式中的角色 3.1 上下文環境 context 它定義了客...
設計模式 狀態模式
描述 允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。通常應用在有好多狀態的流程中。類圖 以下程式模擬糖果機器投幣取糖果的狀態流程。1.定義狀態...