設計模式 狀態模式(C )

2021-07-22 21:18:24 字數 3378 閱讀 5588

參考:設計模式讀書筆記-----狀態模式

**如下:

/*****************************************

@filename:state.h

@datetime:2016.09.19

@author:hjs

@e-mail:[email protected]

@blog:

*****************************************/

#ifndef _state_h

#define _state_h

#include "context.h"

class context;

class state ;

// 已入住狀態

class checked: public state ;

// 空閒狀態

class free : public state ;

// 已預定狀態

class booked : public state ;

#endif // _state_h

/*****************************************

@filename:state.cpp

@datetime:2016.09.19

@author:hjs

@e-mail:[email protected]

@blog:

*****************************************/

#include "state.h"

#include using namespace std;

// 抽象狀態

void state::book() {}

void state::unbook() {}

void state::checkin() {}

void state::checkout() {}

// 空閒狀態:可預訂、可入住,不能退房、取消預定

free::free(context* room)

void free::book()

void free::checkin()

void free::unbook()

void free::checkout()

// 已入住狀態:可退房,不能預定、取消預定、入住

checked::checked(context* room)

void checked::book()

void checked::unbook()

void checked::checkin()

void checked::checkout()

// 已預訂狀態:可取消預定、入住,不能預定、退房

booked::booked(context* room)

void booked::book()

void booked::unbook()

void booked::checkin()

void booked::checkout()

/*****************************************

@filename:context.h

@datetime:2016.09.19

@author:hjs

@e-mail:[email protected]

@blog:

*****************************************/

#ifndef _context_h

#define _context_h

#include "state.h"

class state;

class context ;

#endif // _context_h

/*****************************************

@filename:context.cpp

@datetime:2016.09.19

@author:hjs

@e-mail:[email protected]

@blog:

*****************************************/

#include "context.h"

#include using namespace std;

context::context()

void context::setstate(state* state)

state* context::getfreestate()

state* context::getbookstate()

state* context::getcheckstate()

void context::book()

void context::unbook()

void context::checkin()

void context::checkout()

/*****************************************

@filename:main.cpp

@datetime:2016.09.19

@author:hjs

@e-mail:[email protected]

@blog:

*****************************************/

#include #include "state.h"

#include "context.h"

using namespace std;

// 狀態模式:允許物件在內部狀態改變時改變它的行為,物件看起來好像是修改了它的類。

// 優點:

// 1 封裝了轉換原則;

// 2 列舉了可能的狀態,在列舉之前需要知道狀態的種類;

// 3 將所有狀態的行為放到乙個類中,方便增加新的狀態,改變物件的行為即可改變物件的狀態;

// 4 捨棄了龐大的條件語句;

// 5 可以讓多個物件共享乙個狀態物件,減少系統中物件的個數。

// 缺點:

// 1 對「開閉原則」支援不好;

// 2 狀態過多會導致系統中類的個數增加;

設計模式 狀態模式 C

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

設計模式 狀態模式 C

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

設計模式 狀態模式(c )

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