2014-11-20 155 views
1

我只是在玩弄「狀態設計模式」,並且對狀態機中的錯誤處理方式有幾個問題。下面就讓我們狀態設計模式:錯誤處理

class state_machine 
{ 
    private: 
    state state1; 
    state state2; 

    public: 

} 

class state 
{ 
    private: 
     state_machine* m_state_machine; /** Will pass the pointer to states **/ 
    public: 
    void perform_state1_action(); 
    void perform_state2_action(); 
} 

class state1: public state 
{ 
    public: 
    void perform_state1_action() 
     { 
     /** 
      Functionality 
     **/ 
     } 

    void perform_state2_action(); // Have nothing to do for this function 


} 


class state2: public state 
{ 
    public: 
    void perform_state2_action() 
     { 
     /** 
      Functionality 
     **/ 
     } 

    void perform_state1_action(); // Have nothing to do for this function 


} 

的情況下我的問題是我怎麼妥善處理的情況下,我們稱之爲perform_state2_action當其在狀態1。我是否寫了一個沒有任何功能或可能有錯誤記錄功能的基本函數實現?

+0

爲什麼state_machine有兩個狀態成員時,都出現能夠執行這兩個州。 – 2014-11-20 22:35:18

回答

0

我決定利用微小的變化狀態設計模式:

使用一個通用名稱,如「do_task」功能,並用它來調用所需的專用功能。

這同時防止過剩的絕對虛函數創建提供狀態設計模式的好處

1

此設計模式要求您提供適用於每個州的公共方法。如果你碰到你感到一種衝動,添加一個動作只爲其中之一是有效的情況下,這可能意味着以下之一:

  • 你應該讓私人和從更普遍的稱呼它,公共方法,可以爲您的所有狀態執行
  • 此方法應移動到狀態機之外,因爲它與狀態無關
  • 這是一個特定情況,其中空實現是正確的行爲(所以沒有錯誤日誌需要)
  • 你選擇了錯誤的設計模式