Запрещено использовать методы stati c в заводской схеме? - PullRequest
0 голосов
/ 18 февраля 2020

Мне сказали, что использование методов stati c при реализации шаблона фабричного метода является неправильным и его следует избегать. Поскольку я не был знаком с шаблоном, я принял этот ответ.

Прочитав статьи и углубившись в него, я не смог найти источник, поддерживающий это утверждение.

Может кто-то помогите мне с этой ситуацией. Следует ли мне избегать использования ключевого слова stati c в фабричных методах и, если да, то когда они полезны?

Ответы [ 3 ]

1 голос
/ 18 февраля 2020

Иногда класс реализации не имеет значения, потому что интерфейс определяет все соответствующее поведение. В этих случаях вызывающим абонентам все равно, как это реализовано, и фабричный метод stati c в порядке. Collections.emptyList() или singletonSet(item), например, в порядке.

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

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

1 голос
/ 18 февраля 2020

Первое, что нужно понять на 100%, - это то, что не существует единого «фабричного образца». Термин Factory описывает категорию шаблонов с сильно отличающимися реализациями. Когда кто-то говорит Фабричный шаблон , он может говорить о любом творческом паттерне; но чаще всего фраза Фабричный шаблон указывает на незнание шаблонов дизайна.

Два очень специфических c Фабричных паттерна опубликованы в известной книге «Банды четырех»: Абстрактная Фабрика и Фабрика Метод .

Stati c Factory был популяризирован Джошуа Блохом в Effective Java. Существует нет взаимосвязи между стати c фабричным методом Блоха и фабричным методом GoF, за исключением того, что они имеют схожие имена.

Затем я уточню исходный вопрос, чтобы дать четкий ответ.

Запрещено ли использовать методы stati c в шаблоне GoF Factory Method?

Да. Шаблон GoF требует наследования, которое не поддерживается static методами. Это не делает шаблон Stati c Factory менее полезным! Stati c Factory - это совершенно законный шаблон проектирования, который реализован совершенно иначе, чем шаблон GoF Factory Method. При необходимости вы можете использовать оба шаблона; и теперь вы можете пометить их соответствующим образом.

1 голос
/ 18 февраля 2020

Все более популярным определением фабричного метода является: метод c класса, который возвращает объект этого класса. Но в отличие от конструктора, реальный объект, который он возвращает, может быть экземпляром подкласса.

source: https://sourcemaking.com/design_patterns/factory_method

Насколько я знаю, Можно использовать stati c на заводском методе. Но @Serge Ballesta * имеет хороший комментарий в комментарии.

...