C 設計模式 狀態模式

2021-08-28 12:33:15 字數 1361 閱讀 7935

#ifndef __state_h__

#define __state_h__

//【說明】

// 狀態模式和策略模式比較像,唯一的差別就是狀態模式由內部提供介面給外面來進行狀態的轉換,而策略模式由外部來建立策略例項來呼叫。

// 物件如何在每一種狀態下表現出不同的行為?

//【定義】

// 狀態模式:允許乙個物件在其內部狀態改變時改變它的行為,使物件看起來似乎修改了它的類。

//【角色】

// 抽象狀態(state): 定義乙個介面以封裝與context的乙個特定狀態相關的行為。

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

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

//【意義】

// state模式將所有與乙個特定的狀態相關的行為都放入乙個物件中, 所以通過定義新的子類可以很容易的增加新的狀態和轉換。

// 如果不使用狀態模式,當介面裡的方法比較多時,每個方法內部都進行狀態判斷是一件很繁瑣複雜的事情。

//【示例】

//抽象狀態介面

class istate

;//具體狀態

class morning : public istate

;class day : public istate

;class night : public istate

;//上下文類,定義客戶端使用的介面並維護乙個具體狀態的例項

class statecontext

;void teststate();

#endif

#include #include "state.h"

void morning::proc()

void day::proc()

void night::proc()

statecontext::statecontext()

statecontext::~statecontext()

if (m_day)

if (m_night) }

void statecontext::changestate(istate * state)

void statecontext::sethour(int hour)

else if (hour >= 9 && hour < 18)

else }

void statecontext::execute()

void teststate()

delete sc;

}

設計模式 狀態模式 C

狀態模式主要解決當控制乙個物件狀態的轉換的條件表達過於複雜的情況,使得狀態的轉換不依賴於整體的操作。本文將通過乙個具體的例子說明狀態模式的應用。假設下面乙個場景 乙個新任務提交後,先是收集資料,資料收集完成後等等分配一台機器,分配到機器後就可以將此任務部署至此機器後就可以通知相關模組開始工作。先對此...

設計模式 狀態模式 C

狀態模式是產生乙個可以改變其類的物件,通過前端物件狀態的變化來使後端工作的不同物件履行其職責。通過改變乙個物件的狀態,使它的工作物件也發生變化。如果乙個物件在決定它要做什麼之前總是要對當前的 狀態做很多的判斷,那麼就可以考慮使用狀態模式。乙個壞的例子 worker.h include ifndef ...

設計模式 狀態模式(c )

狀態模式適用於 乙個物件有多種狀態,在不同狀態下執行同一操作的行為是不同的。例如,檔案在read only write only write and read 狀態下,執行讀 寫等操作時的行為是不同的。狀態模式基本思想 用動態繫結 執行時繫結,多型,用虛函式實現 代替if else或switch,以...