state的用意在於,允許乙個物件在其內部狀態改變時改變它的行為;
state模擬context的相關行為介面, 針對具體的狀態, 利用虛函式的機制對映到相應的行為, 從而避免大量的條件語句, 使得**更加清晰, 並且易於維護;當然這樣見帶來大量的子類, 維護這些類也是要代價的;
這裡我做了乙個簡單的c++實現, 模擬門的開啟關閉狀態, 和相關狀態下的行為;這裡的context狀態的變化我處理為委託state改變, 仿照書本案例狀態類採用靜態的生成, 使得狀態物件成為可以共享的輕量級行為物件;
以下完整的源**示例, 水平有限, 不知理解正不正確;
#pragma warning(disable: 4530)#pragma warning(disable: 4786)
#include
#include
using namespace std;
class door_state ;
class door_closed;
class door_opened;
class door
;class door_state
;class door_opened : public door_state
virtual void open(door *p) ;
virtual void close(door *p) ;
virtual void pass(door *);
virtual void report_state(door *p);
};class door_closed : public door_state
virtual void open(door *p);
virtual void close(door *p);
virtual void pass(door *);
virtual void report_state(door *p);
};void door_opened::open(door *p)
void door_opened::close(door *p)
void door_opened::pass(door *p)
void door_opened::report_state(door *p)
void door_closed::open(door *p)
void door_closed::close(door *p)
void door_closed::pass(door *p)
void door_closed::report_state(door *p)
door::door(char *name) : _name(name)
string & door::name()
void door::open()
void door::close()
void door::pass()
void door::report_state()
void door::change_state(door_state* new_state)
int main(int argc, char *argv)
catch(exception &e)
return 0;
}
C 設計模式 state 狀態模式
head first 設計模式 中的樣例非常不錯,想製造乙個自己主動交易的糖果機,糖果機有四個狀態 投入錢不足,投入錢足夠,糖果,糖果售罄。糖果機的當前狀態處於當中不同的狀態時,它針對同乙個操作的反映動作也不同。傳統面向過程程式設計會套用if else對不同的狀態下分別處理,邏輯麻煩並且不具有可拓展...
C 設計模式之State模式
這裡有兩個例子 1 2 關於此設計模式,有幾點概括 context類包含抽象的state state成員變數,context類宣告為state類的frend state至少會呼叫context類的changestate函式 state是在維護乙個狀態,這裡涉及到乙個關鍵問題,state怎麼可能不涉及...
C 設計模式 狀態模式(State)
允許乙個物件在其內部狀態改變時改變它的行為。從而使物件看起來似乎修改了其行為。23種設計模式不比太過於計較它們之間的差異,而更關注他們到底解決的是什麼樣的乙個穩定點和變化點的關係問題。這個時候呢模式之間的關係也理順了,學習模式一那麼生搬硬套,它無非是設計上的演化而已,是一種松耦合設計的原則演化而已。...