狀態模式適用的情況:乙個context物件根據其所處的狀態改變其行為。在狀態模式中,我們通過建立不同的state物件來表示不同的狀態,而context物件則根據不同的state物件表現出不同的行為。狀態模式將不同的狀態結構化,以避免過多的 if else 和 switch case 等樣版**。
用設計模式中的 狀態模式(行為狀態) 實現乙個簡單的狀態機(fsm),其中class machine
為 context 物件 ,class on
和class off
為 state 物件。
可以對比 boost 的 有限狀態機庫 see link:
注: 相比於使用 monobloc 狀態機,狀態模式能夠提高**的靈活性、可維護性和可重率。so~,如果是比較大的專案,又有很多狀態之間的切換,最好是使用狀態模式,而不是乙個 monobloc 狀態機。
#include
using namespace std;
// 該狀態機有 on 和 off 兩種操作
class machine
void
on();
void off();
};// state inte***ce, 在這個介面中宣告 on 和 off 操作
class state
virtual void off(machine *m)
};void machine::on()
void machine::off()
// state子類實現具體的 on 和 off 動作
class on: public state
void off(machine *m);
private:
static on
* m;
on()
{}};void
on::off(machine *m)
class off: public state
void
on(machine *m);
private:
static off* m;
off()
{}};void off::on(machine *m)
// 設定預設狀態為 off
machine::machine()
// initialize
off* off::m
=new off(); // or off* off::m =null;on*
on::m
=new
on(); // or on* on::m = null;
int main()
}
輸出結果:
enter 0/1: 0
already off
enter 0/1: 0
already off
enter 0/1: 1
going from
offto
onenter 0/1: 0
going from
onto
offenter 0/1: 1
going from
offto
onenter 0/1: 1
already on
enter 0/1: 1
already on
enter 0/1:
好文齊分享: 有限狀態機
有限狀態機 finite state machine,fsm 又稱有限狀態自動機,簡稱狀態機,是表示有限個狀態以及在這些狀態之間的轉移和動作等行為的數學模型。狀態儲存關於過去的資訊,就是說 它反映從系統開始到現在時刻的輸入變化。轉移指示狀態變更,並且用必須滿足來確使轉移發生的條件來描述它。動作是在給...
有限狀態機
以前,只碰到過 陣列中所有數字只出現2次,只有乙個出現1次,找這個數的問題 每次迴圈異或陣列中元素,最後的結果就是single one。這次換作出現3次就懵逼了,主要原因,沒有使用過有限狀態機,應該說是連概念都沒有,所以這次一定要好好記錄一下 關於這道題的解釋discussion中woshidais...
有限狀態機
需要掌握的名詞 數字系統有兩大類有限狀態機 finite state machine,fsm moore狀態機和mealy狀態機。狀態機名 次態輸出 moore摩爾 f 現狀,輸入 g 現狀 mealy公尺粒 f 現狀,輸入 g 現狀,輸入 mealy型狀態機 下一狀態不但與當前狀態有關,還與當前輸...