定義:
狀態模式是物件的行為模式,允許乙個物件在其內部狀態改變時改變他的行為,這個物件看上去就像改變了他的類一樣。
角色:
環境(context)角色:定義客戶端感興趣的介面,並且保留乙個具體狀態類的例項,具體狀態類的例項給出環境類的當前狀態。
抽象狀態(state)角色:定義乙個介面,用以封裝環境角色的具體狀態類的行為。
具體狀態(concretestate)角色:每乙個具體狀態類都實現環境角色的狀態對應的具體行為。
例子:
每個工廠都會有考勤系統,其中對上班遲到的懲罰可分成不同的級別,如果遲到30分鐘之內不扣錢,如果遲到超過30分鐘要扣半天的工資,此時將遲到的行為抽象到介面中,作為抽象狀態角色(state),不同的遲到行為作為具體狀態角色(concretestate),環境角色則根據不同的狀態呼叫不同的具體狀態類。
類圖:
* 環境角色類
* @author wang
*/public class context
//轉交抽象類處理
public void request(string mess)
}/**
* 抽象狀態類
* @author wang
*/public inte***ce cardstate
/** * 具體狀態類
* @author wang
*/public class concretecardstatea implements cardstate
}/**
* 具體狀態類
* @author wang
*/public class concretecardstateb implements cardstate
}/**
* 客戶端類
* @author wang
*/public class client
}執行結果:
狀態 State 模式
物件狀態影響物件行為 物件擁有不同的狀態,往往會行使不同的行為.1 動機 在軟體構建過程中,某些物件的狀態如果改變,其行為也會隨之而發生變化。比如文件處於唯讀狀態,其支援的行為和讀寫狀態支援的行為就可能完全不同。如何在執行時根據物件的狀態來透明地更改物件的行為?而不會為物件操作和狀態轉化之前引入緊耦...
狀態模式 State
個人理解 核心是context維護乙個當前狀態,並在invoke狀態方法時,將context維護的當前狀態更新至下一狀態 uml類圖 實現 using system namespace decoratormode public class agecontext public void printag...
state 狀態模式
include include using namespace std 1 將 state宣告為 context的友元類 friend class 其作用是讓 state模式訪問 context 的 protected介面 changesate 2 state 及其子類中的操作都將 context ...