0
私はかなり複雑なステートマシンを持っていますが、私はいくつかの状態を1つに組み合わせることで簡単にInterfaceを提供したいと考えています。StateMachineの削減のためのデザインパターン
以下の解決策で私の問題は、インターフェイスにも存在するいくつかの状態を共有する2つの列挙体のためにコードの重複があることです。
誰も私にデザインパターンのヒントを教えてもらえますか?
#include <iostream>
using namespace std;
enum State { state0, state1, state2, state3, state4, state5 };
enum SimpleState { simple_state0, // <-- Duplication
simple_state1, // <-- Duplication
simple_state2, // <-- Duplication
simple_state3, // <-- Duplication
stateSimple }; // < state4 or state5
class ComplexStateMachine
{
public:
State s_;
State getState()
{
return s_;
};
};
class SimpleInterface
{
public:
SimpleInterface(ComplexStateMachine* c)
{
this->complex_ = c;
};
SimpleState getSimpleState()
{
switch(this->complex_->getState())
{
case state0:
return simple_state0;
case state1:
return simple_state1;
case state2:
return simple_state2;
case state3:
return simple_state3;
case state4:
case state5:
return stateSimple;
}
};
private:
ComplexStateMachine* complex_;
};
int main() {
// Generate complex state machine
ComplexStateMachine* csm = new ComplexStateMachine();
csm->s_ = state0;
// Generate simple interface
SimpleInterface si(csm);
si.getSimpleState(); // <-- Should now return the simplified state
return 0;
}
私は実際に使用したいですStateMachine自体はハードウェアの後ろに本当に意味を持っているので、インタフェースを変更する必要はなく、ファサードなどで作業します。 – alex
それだけでそれを追加し、ファサードで必要なメソッドの分析を行い、クラスを使用するという観点からそれを定式化して、重複した状態を必要としないようにします。例えばおそらくこのような小さなインタフェース: bool HasFinished();値GetResult(); で十分です – PsiX