我正在建立一个通过池化机制一直监控状态的系统。 一旦一个州转移到另一个州,做一些事情来进一步处理。
我想出了一个好主意是EventHandler,取决于状态转换。 但我发现识别状态转换可能有很多条件。
(例如,Initial - > On,On - > Off,On - > Maintaining,Maintaing - > On,...)
有没有一种改善这个问题的好方法?或任何建议?谢谢!
class StateMonitor
{
public delegate void Mydelegate();
public event Mydelegate SomethingHappened;
public string _state;
public StateMonitor()
{
SomethingHappened += new Mydelegate(monitor);
_state = "Initial";
}
public string state
{
get
{
return this._state;
}
set
{
string temp = value;
if (SomethingHappened != null)
{
if(this.state =="Initial" && temp =="On") //state transition
SomethingHappened();
}
}
}
public void monitor()
{
Console.WriteLine("Happened");
}
}
答案 0 :(得分:1)
真正需要的是状态机。例如,你可以从开到关吗?
这是一个answer来启动状态机。
使用1个委托实现的方式的问题是每个状态将开始使方法更大的工作。在将来的某个时刻,该方法将无法维护,您现在可以使用不同的设计来避免这种情况。
答案 1 :(得分:0)
也许enum
可能是States
的{{1}},而Delegate
的签名更改可以处理转换,如:
class StateMonitor
{
public enum States { initial, on, off, maintaining };
public delegate void Mydelegate(States stFrom, States stTo);
public event Mydelegate SomethingHappened;
public States _state;
public StateMonitor()
{
SomethingHappened += new Mydelegate(monitor);
_state = States.initial;
}
public States state
{
get
{
return this._state;
}
set
{
if (SomethingHappened != null)
{
SomethingHappened(this._state, value);
}
_state = value;
}
}
public void monitor(States stateFrom, States stateTo)
{
if (stateFrom == States.initial && stateTo == States.on)
{
// Do something for from Intitial state to On State
}
else if (stateFrom == States.on && stateTo == States.off)
{
// Do something for from On state to Off State
}
//... the rest of the code here
}
}