Новые компоненты, которые реализуют методы еще не в интерфейсе - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть два файла классов (WallSwitch и ProximitySwitch) - давайте предположим, что они являются сторонними компонентами - которые реализуют методы On() и Off() из интерфейса IUserController, который у меня естьвстроенный в мое ядро, потребляющий систему.

У меня также есть три класса - также поставляемые сторонними производителями - а именно, CeilingFan, Lightbulb и CCTVCamera, которые реализуют методы из интерфейса ICeilingComponent, которая является частью основной системы.Эти ICeilingComponent реализующие классы создаются и внедряются в наследуемые классы IUserController, например:

ICeilingComponent component = new LightBulb();

IUserController controller = new WallSwitch(component);

Затем ...

controller.On();

controller.Off();

Все счастливы.

Теперь у меня есть новый сторонний компонент под названием DimmerSwitch, который также реализует IUserController Методы On() и Off(), но класс DimmerSwitch дополнительно реализует Методы IncreasePower(int amount)и DecreasePower(int amount), который влияет только на CeilingFan и (затемняемый) Lightbulb, а не на CCTVCamera.

. Я хотел бы разместить это в базовой системе, но мне не удаетсяпонять, как это сделать, не вынуждая другие сторонние компоненты изменять их конструкцию, как описано в интерфейсе, для которого я заключил контракт.Это важный бит.Должен быть способ, которым я могу справиться с этим в основной системе, не затрагивая изменения в другом месте.

Какой шаблон проектирования или методологию интерфейса мне не удалось правильно понять?

Я надеялся, что написание всего этогоДаун каким-то образом представит решение для меня.Но нет.Может быть, я сейчас не вижу дрова для деревьев.Искал то, что я думал, будет правильным термином.Это должно быть общая проблема, конечно.Не стесняйтесь заставлять меня выглядеть глупым.

PS Это явно не реальная проблема - я, конечно, не хочу поощрять дискуссии о напряжении.Но это тоже не домашнее задание: я бы только хотел быть таким молодым.Я просто пытаюсь разобраться с этой проблемой, чтобы облегчить понимание.Любые ответы приветствуются (кроме любых вопросов, касающихся электрического заряда).

1 Ответ

0 голосов
/ 19 февраля 2019

Я думаю, что вы можете создать расширенный интерфейс, который называется, например, IEnhancedUserControl, например,

interface IEnhancedUserController : IUserController
{
void IncreasePower(int amount);
void DecreasePower(int amount);
}

Тогда ваши CeilingFan и Lightbulb реализуют этот расширенный интерфейс, а не оригинальный интерфейс.Таким образом, вы можете избежать изменения остального кода, такого как оригинальный интерфейс, CCTVCamera и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...