我正在用c#编写代码,目前正在实现类似组件的“电开关”。
通常的想法是有一堆实现ISwitch接口的类,当一个类为false时,它基本上会触发Off()动作,而当所有条件为true时,则触发On()。
想法很明确,我很确定有一种针对这种行为/功能的设计模式,希望能参考文档,以便我进行自我教育并了解最佳做法,
欢呼
答案 0 :(得分:2)
这是一个例子:
public delegate void HandleSwitchStateChanged(ISwitch source, bool switchedOn);
public interface ISwitch
{
event HandleSwitchStateChanged SwitchStateChanged;
bool SwitchedOn { get; }
}
public enum SwitchesState
{
AllOn,
AllOff,
Mixed
}
public class MonitorsMultipleSwitches
{
private readonly ISwitch[] _switches;
private SwitchesState _switchesState;
public MonitorsMultipleSwitches(ISwitch[] switches)
{
_switches = switches;
foreach (var item in switches)
{
item.SwitchStateChanged += HandleSwitchStateChanged;
}
}
public void HandleSwitchStateChanged(ISwitch source, bool switchedOn)
{
SwitchesState newState;
if (_switches.All(s => s.SwitchedOn))
newState = SwitchesState.AllOn;
else if (_switches.All(s => !s.SwitchedOn))
newState = SwitchesState.AllOff;
else
newState = SwitchesState.Mixed;
if (newState == _switchesState) return; // no meaningful change
_switchesState = newState;
// do something.
}
}
在此示例中,一类监视多个交换机。如果其中任何一个的状态发生更改,它都会检查是否全部打开,全部关闭,或者某些打开并且某些关闭。然后,如果与以前的状态不同,它可以根据需要做出反应。
(也许AllOff
并不是您所关心的状态-它们全都处于启用状态,或者您不在乎。)