首页 > 解决方案 > 像电开关这样的设计模式?

问题描述

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

一般的想法是有一堆实现 ISwitch 接口的类,当一个为 false 时,它​​基本上触发 Off() 操作,当所有类都为 true 时,则触发 On()。

想法很清楚,我很确定这种行为/功能有一个设计模式,希望能参考文档,这样我就可以自学并查看最佳实践,

干杯

标签: c#design-patternssoftware-design

解决方案


这是一个例子:

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不是你关心的状态——要么他们都在,要么你不关心。)


推荐阅读