設計模式之狀態模式

2021-08-01 21:17:06 字數 2724 閱讀 4680

將當前工作場景所要做的工作內容(工作內容互相之間有順序切換關係)交給具體狀態類處理(每一種狀態處理特定行為),避免所有繁瑣的業務包雜在工作場景進行過多的分支切換操作,經過這樣的分層之後,使得狀態的切換也只是在狀態類之間切換(通過傳遞工作場景物件指標或引用),雖說**量增加了不少,但是對於業務的處理清晰了許多。

例一: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的乙個特...