2014-11-20 124 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

此设计模式要求您提供适用于每个州的公共方法。如果你碰到你感到一种冲动,添加一个动作只为其中之一是有效的情况下,这可能意味着以下之一:

  • 你应该让私人和从更普遍的称呼它,公共方法,可以为您的所有状态执行
  • 此方法应移动到状态机之外,因为它与状态无关
  • 这是一个特定情况,其中空实现是正确的行为(所以没有错误日志需要)
  • 你选择了错误的设计模式