狀態模式 State

2021-07-13 11:49:37 字數 1263 閱讀 3711

狀態模式允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了他的類。

適用場景:

乙個物件的行為取決於他的狀態,並且它必須在執行時根據狀態改變它的行為;

乙個操作中含有龐大的多分支結構,並且這些分支決定於物件的狀態。

類圖:

模式的組成:

環境類context: 定義客戶感興趣的介面。維護乙個concretestate子類的例項,這個例項定義當前狀態;

抽象狀態類state: 定義乙個介面以封裝與context的乙個特定狀態相關的行為;

具體狀態類concretestate: 每一子類實現乙個與context的乙個狀態相關的行為;

例項:push顯示紅-〉黃-〉綠,pull顯示綠-〉黃-〉紅

public inte***ce state

public class context

public void setstate(final state state)

public void push()

public void pull()

}//red

public class concretestatea implements state

@override

public void handlepull(final context context)

@override

public string getcolor()

}//yellow

public class concretestateb implements state

@override

public void handlepull(final context context)

@override

public string getcolor()

}//green

public class concretestatec implements state

@override

public void handlepull(final context context)

@override

public string getcolor()

}public class client

}結果:

push:

redyellowgreen

pull:

greenyellowred

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