像电力开关这样的设计模式?
design pattern like electricity switch?
我正在用 c# 编写代码,目前正在实施一个 "electricity switch" 类组件。
一般的想法是有一堆 类 实现 ISwitch 接口,当一个为假时,它基本上触发一个 Off() 动作,当所有为真时,然后 On()。
想法很清楚,我很确定这种行为/功能有一种设计模式,希望能参考文档,这样我就可以自学并查看最佳实践,
干杯
这是一个例子:
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.
}
}
在此示例中,一个 class 正在监视多个交换机。如果其中任何一个的状态发生变化,它会检查是否全部打开、全部关闭,或者部分打开部分关闭。然后,如果这与之前的状态不同,它可以根据需要做出反应。
(也许 AllOff
不是您关心的状态 - 要么他们都在,要么您不关心。)
我正在用 c# 编写代码,目前正在实施一个 "electricity switch" 类组件。
一般的想法是有一堆 类 实现 ISwitch 接口,当一个为假时,它基本上触发一个 Off() 动作,当所有为真时,然后 On()。
想法很清楚,我很确定这种行为/功能有一种设计模式,希望能参考文档,这样我就可以自学并查看最佳实践,
干杯
这是一个例子:
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.
}
}
在此示例中,一个 class 正在监视多个交换机。如果其中任何一个的状态发生变化,它会检查是否全部打开、全部关闭,或者部分打开部分关闭。然后,如果这与之前的状态不同,它可以根据需要做出反应。
(也许 AllOff
不是您关心的状态 - 要么他们都在,要么您不关心。)