фабрика с использованием enum - PullRequest
0 голосов
/ 28 апреля 2020

Давайте предположим, что у нас есть фабрика с частной картой

clas Factory {
    EnumMap<Color, SomeInterface> map;
    Enum Color {
        FOO,
        BAR
    }
}

и мы хотели бы предоставить возможность получить объект, который реализует SomeInterface

SomeInterface get(Color color)

или реализовать отдельный метод для цвета

SomeInterface getFoo();
SomeInterface getBar();

Должно ли оно быть реализовано как однократное получение или умножение ie?

1 Ответ

0 голосов
/ 29 апреля 2020

Перечисления могут реализовывать интерфейсы. Таким образом, вам не нужна фабрика. Таким образом, вам не нужна карта. Таким образом, вам не нужны методы-получатели.

Ни foo, ни bar не являются цветами, также для перечисления цветов некоторые люди могут упомянуть, что цветов больше, чем двух. SomeInterface - это не говорящее имя для интерфейса. Метод конструирования Factory-класса не должен называться get , он должен называться create или construct.

Использовать первый метод или второй? Поскольку вы действительно можете выбирать между ними, похоже, get(Color) может справиться со всей работой, которую getFoo и getBar выполняет самостоятельно. Это означает, что getFoo и getBar будут выглядеть примерно одинаково. Предполагая, что у нас есть еще 30 цветов, кроме foo и bar, у нас будет еще 30 геттеров для всех 30 дополнительных цветов. Поскольку getFoo и getBar будут выглядеть одинаково, все остальные 30 получателей тоже будут выглядеть одинаково. Это приведет разработчика к одному вопросу: я должен повториться? Есть принцип не повторяться (DRY). Соблюдение этого правила «Не повторяй себя» (DRY) побуждает нас отдавать предпочтение первому, а не второму методу.

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