狀態模式 State

2021-06-20 13:10:45 字數 1221 閱讀 1295

狀態模式(state),當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。

狀態模式主要解決的是當控制乙個物件的狀態轉換的條件表示式過於複雜時的情況,把狀態判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。如果狀態判斷很簡單,就沒有必要用『狀態模式』了

狀態模式結構圖

state類,抽象狀態類,定義乙個介面以封裝與context的乙個特定狀態的行為。

abstract class state

concretestate類,具體狀態,每乙個子類實現乙個與context的乙個狀態相關的行為。

class concretestatea : state

}class concretestateb : state

}context類,維護乙個concretestate子類的例項,這個例項定義當前的狀態。

class context

public state state

set

}public void request()

}---客戶端**---

static void main(string args)

狀態模式的好處是將特定狀態相關的行為區域性化,並且將不同狀態的行為分割開來。

目的就是消除龐大的條件分支語句,狀態模式通過把各種狀態轉移邏輯分布到state的子類之間,來減少相互間的依賴。

當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為時,就可以考慮使用狀態模式了。

工作狀態的**結構圖:

工作狀態的**實現

抽象狀態

public abstract class state

//此時工作類,沒有了過長的分支判斷語句

public class work

private double hour

public double hour

set

}public void setstate(state s)

public void writeprogram()

}---客戶端**---

static void main(string args)

狀態 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 ...