Factory Способы создания всегда статичны?
Обычно место для классов factory статично, а также методы factory.
Было ли в GOF в книге Design Patterns указано, что фабрики и их методы ДОЛЖНЫ быть статичными, чтобы соответствовать строгому определению шаблона?
Имеет ли фабрики +/методы статические только последствия шаблона? данные состояния обычно не поддерживаются классом factory, поэтому они обычно статичны.
Ответы
Ответ 1
Я не верю, что существует такое понятие, как "строгое определение" шаблона. По своей природе существуют шаблоны, чтобы понять суть проблемы, которая снова и снова появляется в программном обеспечении и описывает, как может выглядеть решение.
В частности, с шаблоном Factory нет, нет требования, чтобы методы Factory были статическими. Суть шаблона в том, что у вас есть один объект, который отвечает за создание экземпляров другого класса. Как вы это делаете, это зависит от вас, хотя общий способ, как описано в шаблоне, заключается в использовании статического метода для класса. Однако в одной из наших систем есть механизм Factory, который фактически является двухступенчатым. Вы используете статический метод для класса для создания объекта Factory, который может быть настроен для выбора между набором реализаций, а затем использовать объект Factory для исключения экземпляров объекта, который вам нужен для реального работа.
Также рассмотрим реализацию шаблона Factory на языке, который не имеет статических методов. Например, в Scala вы должны использовать объект вместо класса. Хотя поведение этого очень похоже на использование статических методов в классе в Java, характер реализации сильно отличается.
Ответ 2
Нет, фабрики могут находиться в состоянии. Это зависит от того, что нужно.
Я бы предположил, что создание является статическим, кажется хорошим выбором в первом случае - howwer в тот момент, когда вы пытаетесь унифицировать статику, с которой вы, как правило, сталкиваетесь с проблемами.
Убирайтесь, пока вы им не понадобятся.
Ответ 3
Нет, factory класс по умолчанию не должен быть статическим. На самом деле, статические классы не приветствуются в мире ООП, поскольку они также могут передавать некоторые состояния и, следовательно, внедрять глобальное состояние приложения. Если вам нужен только один объект factory, который может присутствовать, вы можете управлять его созданием с помощью шаблона singleton.
В случае factory метода - это нормально, чтобы он был статичным (на самом деле нет другого разумного способа пойти:)).
Ответ 4
Я предполагаю, что у моих BlueCarFactory
и my RedCarFactory
есть метод createCar
. Это просто здравый смысл, чтобы повторно использовать фактический метод создания путем его параметризации. Затем можно было бы создать CarFactory(blue)
и a CarFactory(red)
. Это означает, что для объекта CarFactory
требуется переменная-член для хранения цвета произведенных автомобилей.
Заключение: нет смысла создавать метод класса Factory static. Имеет смысл создать объект singleton Factory.
Ответ 5
Использование Static Method
не связано с каким-либо шаблоном проектирования. Это выбор между использованием Class level
или метода уровня экземпляра. Factory
класс не требует поддержания какого-либо состояния. Так что обычно мы идем на Static method
. Если это действительно требует state
, то мы создаем объект для класса и устанавливаем состояние для объекта. На этот раз мы можем выбрать static
метод или метод instance
.