状态设计模式:错误处理

时间:2014-11-20 21:47:29

标签: c++ design-patterns state

我只是在玩#34状态设计模式"并且有一些关于如何在状态机中处理错误的问题。我们来看下面的案例

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的情况。我是否编写了基本功能实现,没有任何错误或可能是错误记录功能?

2 个答案:

答案 0 :(得分:1)

此设计模式要求您提供可用于每个州的公共方法。如果您遇到一种情况,您觉得有兴趣添加仅对其中一个有效的操作,则可能意味着以下情况之一:

  • 您应该将其设为私有,并使用更通用的公共方法进行调用,这些方法可以针对您所有的州实施
  • 此方法应移出状态机,因为它与状态无关
  • 这是一个特殊情况,其中空实现是正确的行为(因此不需要错误日志)
  • 您选择了错误的设计模式

答案 1 :(得分:0)

我决定使用状态设计模式进行微小改动:

为“do_task”之类的函数使用通用名称,并使用它来调用所需的私有函数。

这提供了状态设计模式的好处,同时防止创建剩余的绝对虚函数