(十二)狀態模式

2021-07-10 05:15:22 字數 1343 閱讀 2536

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

uml類圖:

// state.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include #include #include #include using namespace std;

class context;

//抽象的狀態,定義了某種狀態下的操作抽象方法

class state

virtual void handle(context *context) = 0;

};//乙個用於互動的類,可以理解為乙個外殼或只是一層業務封裝

class context

public :

//通過設定狀態來控制狀態的變化

void setstate(state *state)

//客戶端呼叫的介面,然後就可以省略if..else分支,

//且會按照設計類的狀態鏈條,自動執行該狀態下的操作

//並設定下一種狀態

void request() };

//具體的狀態類(相當於if...else的各個分支的封裝)

class concretestatea : public state

;class concretestateb : public state

;void concretestatea::handle(context *context)

void concretestateb::handle(context *context)

int _tmain(int argc, _tchar* argv)

輸出:

狀態模式的優勢:

1.將與特定狀態相關的行為區域性化,並且將不同狀態的行為分割開來。【dp】

2.將特定的狀態的相關行為放入乙個物件中,由於所有與狀態相關的**存在於某個concretestate(具體狀態)中,所以通過定義新的子類很容易地增加新的狀態和轉換。【dp】

3.狀態模式,通過把各種狀態轉移邏輯分布到state的子類之間,來減少相互間的依賴。(這樣就可以將龐雜的if else分支拆開處理)

適用的場景:

當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為時(這點很關鍵,保證狀態要有連續性),就可以考慮使用狀態模式了。

設計模式(十二 狀態模式

狀態模式,當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。1.如下 using system namespace state using system namespace state else using system namespace state else using s...

設計模式 十二 狀態模式 C

狀態模式 狀態模式允許乙個物件在其內部狀態改變的時候改變行為。在狀態模式 state pattern 中,類的行為是基於它的狀態改變的。這種型別的設計模式屬於行為型模式。設計的時候把狀態物件和目標物件分離。目標物件執行行為的時候,把目標物件傳遞給狀態物件a,如果滿足狀態a的條件,執行狀態a的方法,不...

設計模式實現(十二) 狀態模式 State

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