шаблон дизайна, как выключатель электричества? - PullRequest
0 голосов
/ 22 апреля 2019

Я кодирую на c # и в настоящее время реализую компонент типа «выключатель электричества».

Общая идея заключается в том, что существует множество классов, реализующих интерфейс ISwitch, и когда один из них равен false, он в основном вызывает отключение.() и когда все верно, то On ().

Идея довольно ясна, и я уверен, что для такого поведения / функциональности существует шаблон проектирования, был бы признателен за ссылку на документацию, чтобы я мог обучитья и смотрю на лучшие практики,

ура

1 Ответ

2 голосов
/ 22 апреля 2019

Вот пример:

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 - это не то состояние, о котором вы заботитесь - либо они все включены, либо вам все равно.)

...