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