SIP之設計模式 State設計模式

2021-04-25 03:53:06 字數 1088 閱讀 7312

學過設計模式和沒接觸過c++的就不要往下看了。

設計模式可能計算機系的同學都學過,不過我用得最多的可能是下面幾種:

1.singleton

2.factory

3.strategy

因為這三個我覺得最簡單和使用.

但 我的sip是要用狀態機的,所以決定用state設計模式.state模式對我們的sip有什麼作用呢?因為sip是有很多狀態的,如果用傳統的 if,else語句來做,會引入很多的程式分支,會越來越變得難以維護。而state設計模式的好處就在於每引入乙個新的狀態對以前的**影響會很小。

但state設計模式以前沒實際用過,還是先舉個小例子吧,怕以後寫偏了。(我差點就寫成command設計模式了)。

最簡單的例子,至少有兩個類:state, statemachine.

先看一下最簡單的**框架:

class statemachine

private:

state* m_pcurrentstate;

class state

;statemachine是用於維護狀態的,changestate函式專門負責改變狀態,currentstate成員變數維護當前狀態。

state類是乙個狀態抽象基類,有新的狀態就從這個類繼承。該類有乙個process方法,子類就負責實現自己的process方法。

我們先看乙個例子:

現在有個類openstate從state繼承,表示開啟狀態。

class openstate: public state

public:

static openstate* instance()

virtual void process(statemachine* pmachine)

// .... 做些開啟的操作

pmachine->changestate(openstate::instance());

process方法首先負責做一些開啟的操作,再通過呼叫statemachine中的changestate函式來改變狀態。

當有新的狀態加入時,只要從state繼承寫出具體的concretestate,我們就可以有closestate, activestate各種各樣的狀態。

設計模式之State模式

state模式類似於switch的多路分鐘功能 狀態模式的ulm圖 狀態模式用於改變目標物件的行為方式,隨著狀態變化目標程式從乙個轉到另乙個目標程式。package state public class creature private class forg implements state pri...

設計模式之state模式

狀態模式 state pattern 允許乙個物件在其內部狀態改變時改變它的行為。適用場景 一 乙個物件的行為取決於他的狀態,並且它必須在執行時根據狀態改變它 的行為 二 乙個操作中含有龐大的多分支條件語句,並且這些分支依賴於該物件的 狀態。優缺點 狀態模式的主要優點在於封裝了轉換規則,其缺點在於使...

設計模式之命令(State)模式

狀態模式是在程式開發時,經常用到的模式。如果沒有應用過,而實現業務功能。那你也一定是按照狀態模式的路子走的,只不過你沒有感覺到而已。它的實現,是要根據物件的內部狀態變化,而自動執行相應的功能。費話就不說了,請看一下源 這也是我研究設計模式時看到的乙個例子,把其翻譯成中文,使個位能夠看懂些,由於水平有...