C# 像电力开关这样的设计模式?
我用c语言编写代码,目前正在实现一个类似“电力开关”的组件 一般的想法是有很多类实现了ISwitch接口,当其中一个为false时,它基本上会触发Off()操作,当所有的都为true时,则触发On() 想法非常清楚,我非常确定这种行为/功能有一种设计模式,希望能参考文档,这样我就可以自学并了解最佳实践 干杯下面是一个例子:C# 像电力开关这样的设计模式?,c#,design-patterns,software-design,C#,Design Patterns,Software Design,我用c语言编写代码,目前正在实现一个类似“电力开关”的组件 一般的想法是有很多类实现了ISwitch接口,当其中一个为false时,它基本上会触发Off()操作,当所有的都为true时,则触发On() 想法非常清楚,我非常确定这种行为/功能有一种设计模式,希望能参考文档,这样我就可以自学并了解最佳实践 干杯下面是一个例子: public delegate void HandleSwitchStateChanged(ISwitch source, bool switchedOn); public
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
不是你关心的一个状态——要么它们都打开了,要么你不关心。)下面是一个例子:
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
不是您关心的状态-要么它们都打开,要么您不关心。)考虑查看观察者模式@斯图奇,谢谢,我来看看!乍一看,通知所有观察者似乎比我所需要的有点开销,我基本上想知道在给定时间电路的开/关状态,所以我不确定我是否需要通知所有人,如果可以这样说的话,只通知“主控制器”创建一个管理器类,在列表中添加开关
,并设置公共bool On=>\u开关。所有(x=>x.On)
和反向关闭?@camiloterevento感谢您的回答,我发现下面的答案很有帮助。干杯,看观测者模式@斯图奇,谢谢,我来看看!乍一看,通知所有观察者似乎比我所需要的有点开销,我基本上想知道在给定时间电路的开/关状态,所以我不确定我是否需要通知所有人,如果可以这样说的话,只通知“主控制器”创建一个管理器类,在列表中添加开关
,并设置公共bool On=>\u开关。所有(x=>x.On)
和反向关闭?@camiloterevento感谢您的回答,我发现下面的答案很有帮助。干杯!谢谢你!没有考虑基于事件的实现尼斯!谢谢你!没有考虑基于事件的实现