狀態 State 模式

2021-04-13 05:52:06 字數 1256 閱讀 6521

物件狀態影響物件行為

物件擁有不同的狀態,往往會行使不同的行為...

1、動機

在軟體構建過程中,某些物件的狀態如果改變,其行為也會隨之而發生變化。比如文件處於唯讀狀態,其支援的行為和讀寫狀態支援的行為就可能完全不同。

如何在執行時根據物件的狀態來透明地更改物件的行為?而不會為物件操作和狀態轉化之前引入緊耦合?

2、意圖

允許乙個物件在其內部狀態改變時改變它的行為。從而使物件看起來似乎修改了其行為。 

3、圖

4、**

enum documentstate

class document

else if ( ... ) }}

//抽象類--表達狀態及依賴狀態的行為

abstract class stateddocument

}//main logic 主邏輯

class document 

public void handler1()

public void handler2()

public void handler3()

}public class readonlydocument : stateddocument

public void handler2()

public void handler3()

}public class editabledocument : stateddocument

public void handler2()

public void handler3()

}public class context

public void setstate( state state )

}public inte***ce state

public class concretestate : state;}

5、要點

(1) state模式將所有與乙個特定狀態相關的行為都放入乙個state的子類物件中,在物件狀態切換時,切換相應的物件,但同時維持state的介面,這樣實現了具體操作與狀態轉換之間的解耦。

(2) 為不同的狀態引入不同的物件使得狀態轉換變得更加明確,而且可以保證不會出現狀態不一致的情況。因為轉換是原子性的——即要麼徹底轉換過來,要麼不轉換。

(3) 如果state物件沒有例項變數,那麼各個上下文可以共享同乙個state物件,從而節省物件開銷。

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

狀態模式 State

狀態模式 state 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式主要解決的是當控制乙個物件的狀態轉換的條件表示式過於複雜時的情況,把狀態判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。如果狀態判斷很簡單,就沒有必要用 狀態模式 了 狀態模式結...