设计模式像电开关?

时间:2019-04-22 18:31:26

标签: c# design-patterns software-design

我正在用c#编写代码,目前正在实现类似组件的“电开关”。

通常的想法是有一堆实现ISwitch接口的类,当一个类为false时,它基本上会触发Off()动作,而当所有条件为true时,则触发On()。

想法很明确,我很确定有一种针对这种行为/功能的设计模式,希望能参考文档,以便我进行自我教育并了解最佳做法,

欢呼

1 个答案:

答案 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并不是您所关心的状态-它们全都处于启用状态,或者您不在乎。)