狀態模式
輸入訊號是事件;輸出是狀態結果,狀態模式狀態機就是乙個黑盒子。
狀態模式主要突出了兩個字:」改變」,物件的狀態決定了狀態的行為,事物的本質決定了事物的行為。
對乙個狀態特別重要的物件,通過狀態機來建模乙個物件的狀態;
狀態模式處理的核心問題是狀態的遷移,因為在物件存在很多狀態情況下,
對各個business flow,各個狀態之間跳轉和遷移過程都是及其複雜的。
例如乙個工作流,審批乙個檔案,存在新建、提交、已修改。
hr部門審批中、老闆審批中、hr審批失敗、老闆審批失敗等狀態,涉及多個角色互動,涉及很多事件,
這種情況下用狀態模式(狀態機)來建模更加合適;
把各個狀態和相應的實現步驟封裝成一組簡單的繼承自乙個介面或抽象類的類,
通過另外的乙個context來操作他們之間的自動狀態變換,通過event來自動實現各個狀態之間的跳轉
參與者:
context(環境,person)定義客戶感興趣的類。
state(moodstate):定義乙個介面以封裝與context的乙個特定狀態相關的行為
concretestate subclasses(具體狀態子類,如angry)每乙個子類實現乙個與context的狀態相關的行為。
他們的協作關係是:
context將於狀態相關的請求委託給當前的concretestate物件處理。
context可將自身作為乙個引數傳遞給處理該請求的狀態物件,這使得狀態物件在必要的時候可訪問context。
context是客戶使用的主要介面,客戶可用狀態物件來配置乙個context,一旦乙個context配置完畢,他的客戶不再需要直接與狀態物件打交道。
context或者concretestate子類都可以決定哪個狀態是另外那個狀態的後繼者,以及是在何種條件下進行狀態轉換。
}狀態介面:
public
inte***ce moodstate
抓狂狀態:
public
class mad implements moodstate
public
void changestate()
public
void dosomething()
}生氣狀態:
public
class angry implements moodstate
public
void dosomething()
}高興狀態:
public
void changestate()
public
/*** 狀態模式
** 允許乙個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它所屬的類**/
inte***ce state
class context
public
function setstate($state)
public
function request()
}class statea implements state
public
function display()
}class stateb implements state
public
function display()
}class statec implements state
public
function display()}//
例項化一下
$objcontext = new context(new stateb());
$objcontext->request();
$objcontext->request();
$objcontext->request();
$objcontext->request();
$objcontext->request();
?>
狀態模式 java php
狀態模式 輸入訊號是事件 輸出是狀態結果,狀態模式狀態機就是乙個黑盒子。狀態模式主要突出了兩個字 改變 物件的狀態決定了狀態的行為,事物的本質決定了事物的行為。對乙個狀態特別重要的物件,通過狀態機來建模乙個物件的狀態 狀態模式處理的核心問題是狀態的遷移,因為在物件存在很多狀態情況下,對各個busin...
設計模式 狀態模式
狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況,把狀態的判斷邏輯轉移到表示不同狀態的一些列類當中,可以把複雜的判斷邏輯簡化。當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行...
設計模式 狀態模式
1.概述 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。2.解決的問題 主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。3.模式中的角色 3.1 上下文環境 context 它定義了客...