將當前工作場景所要做的工作內容(工作內容互相之間有順序切換關係)交給具體狀態類處理(每一種狀態處理特定行為),避免所有繁瑣的業務包雜在工作場景進行過多的分支切換操作,經過這樣的分層之後,使得狀態的切換也只是在狀態類之間切換(通過傳遞工作場景物件指標或引用),雖說**量增加了不少,但是對於業務的處理清晰了許多。
例一:state.h
#ifndef state_h
#define state_h
#include
using
namespace
std;
class context;
//抽象狀態類
class state
;//工作場景
class context
~context();
//對請求做處理,並設定下一狀態
void request()
}void changestate(state* pstate)
private:
state* _state;
};//具體狀態類c
class concretestatec : public state
;//具體狀態類b
class concretestateb : public state
};//具體狀態類a
class concretestatea : public state
};#endif // state_h
state.cpp
#include
"state.h"
//執行該狀態的行為並改變狀態為a狀態
void concretestatec::handle(context *pcontext)
main.cpp
int main()
例二:
car.h
#ifndef _car_h_
#define _car_h_
class car;
class state
;class car
car(int i,int j):x(i),y(j)
~car()
int getx()
int gety()
void forward();
void turnleft();
void turnright();
void disp();
class north : public state
;class south : public state
;class east : public state
;class west : public state
;private:
int x;
int y;
state *state;
};#endif
car.cpp
#include
#include
"car.h"
using namespace std;
void car::forward()
*/ state->forward(this);
}void car::turnleft()
void car::turnright()
void car::disp()
//north
void car::north
::forward(car *c)
void car::north
::turnleft(car *c)
void car::north
::turnright(car *c)
void car::north
::display()
//south
void car::south
::forward(car *c)
void car::south
::turnleft(car *c)
void car::south
::turnright(car *c)
void car::south
::display()
//east
void car::east
::forward(car *c)
void car::east
::turnleft(car *c)
void car::east
::turnright(car *c)
void car::east
::display()
//west
void car::west
::forward(car *c)
void car::west
::turnleft(car *c)
void car::west
::turnright(car *c)
void car::west
::display()
main.cpp
#include
#include "car.h"
using
namespace
std;
int main()
設計模式之狀態模式
一 作用 允許乙個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類。其別名為狀態物件 objects for states 狀態模式是一種物件行為型模式。二 例子 狀態抽象類 abstract class state 具體狀態類,每個狀態對應乙個類 class concretestat...
設計模式之 狀態模式
gof 設計模式 中給狀態模式下的定義為 允許乙個物件在其內部狀態改變時改變它 的行為。這個物件看起來似乎修改了它的類。看起來,狀態模式好像是神通廣大 居然能夠 修改自身的類 能夠讓程式根據不同的外部情況來做出不同的響應,最直接的方法就是在程式中將這些可能發生的外部情況全部考慮到,使用 if els...
設計模式之狀態模式
定義 允許乙個物件在其內部狀態變化時改變它的行為,物件看起來似乎修改了它所屬的類。類圖 說明 context表示環境類,它定義了客戶應用程式感興趣的介面,並維護乙個concretestate子類的例項,這個例項用於定義當前狀態 state表示抽象狀態類,它定義了乙個介面以封裝與context的乙個特...