簡體   English   中英

狀態設計模式:錯誤處理

[英]State Design Pattern: Error Handling

我只是在玩“狀態設計模式”,對狀態機中錯誤的處理方式有幾個問題。 讓我們來看下面的情況

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


}

我的問題是,當狀態為state1時,我們如何妥善處理我們調用perform_state2_action的情況。 是否編寫沒有任何內容或可能有錯誤記錄功能的基本功能實現?

此設計模式要求您提供可用於每個州的公共方法。 如果您遇到需要添加僅對其中之一有效的操作的沖動,則可能表示以下情況之一:

  • 您應該將其設為私有,並從更通用的公共方法中調用它,該方法可以在您所有的州中實施
  • 此方法應移至狀態機之外,因為它與狀態無關
  • 這是一種特殊情況,其中空實現是正確的行為(因此不需要錯誤日志)
  • 您選擇了錯誤的設計模式

我決定使用狀態設計模式進行較小的更改:

對諸如“ do_task”之類的函數使用通用名稱,並使用該名稱來調用所需的私有函數。

這提供了狀態設計模式的優點,同時防止了創建多余的絕對虛函數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM