Методы создания фабрики, всегда статичные?

Подготовленные записи используют '?' в MySQL, чтобы обеспечить привязку параметров к инструкции. При правильном использовании он считается более защищенным от инъекций SQL. Это также позволяет выполнять более быстрые SQL-запросы, поскольку запрос должен быть только один раз компилирован и может быть повторно использован.

18
задан IanT8 15 October 2009 в 08:25
поделиться

5 ответов

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

В частности, для фабричного шаблона нет требования, чтобы фабричные методы были статическими. Суть шаблона в том, что у вас есть один объект, который отвечает за создание экземпляров другого класса. Как вы это сделаете, зависит только от вас, хотя распространенный способ, как описано в шаблоне, состоит в использовании статического метода в классе. Тем не менее, у нас есть заводской механизм в одной из наших систем, который на самом деле является двухступенчатым. Вы используете статический метод в классе для создания объекта фабрики, который может быть настроен на выбор из набора реализаций, а затем используете объект фабрики, чтобы исключить экземпляры объекта, которые необходимы для реальной работы.

Также рассмотрим реализацию фабричного шаблона на языке, который не имеет статических методов. Например, в Scala вы бы использовали объект вместо класса. Хотя поведение этого очень похоже на использование статических методов в классе в Java, природа реализации совершенно иная.

22
ответ дан 30 November 2019 в 03:43
поделиться

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

В случае фабричного метода - нормально держать его статичным (на самом деле другого разумного пути нет:)).

4
ответ дан 30 November 2019 в 03:43
поделиться

Использование Static Method не связано с каким-либо шаблоном проектирования. Это выбор: мы используем метод Class level или метод уровня экземпляра. Factory Класс не требует поддержания какого-либо состояния. Так что обычно мы идем на Static method. Если это действительно требует state, то мы создаем объект для класса и устанавливаем состояние для объекта. На этот раз мы можем выбрать метод static или instance.

0
ответ дан 30 November 2019 в 03:43
поделиться

Я предполагаю, что моя BlueCarFactory и моя RedCarFactory имеют метод createCar . Это просто здравый смысл - повторно использовать фактический метод создания, параметризовав его. Затем можно создать CarFactory (синий) и CarFactory (красный) . Это означает, что объекту CarFactory требуется переменная-член для хранения цвета произведенных автомобилей.

Заключение: нет смысла делать метод класса Factory статическим. Имеет смысл создать одноэлементный объект Factory.

0
ответ дан 30 November 2019 в 03:43
поделиться

Нет, фабрики могут сохранять состояние. Это зависит от того, что нужно.

Я бы сказал, что создание статики кажется хорошим выбором в первую очередь - но в тот момент, когда вы пытаетесь провести модульную проверку статики, вы, как правило, сталкиваетесь с проблемами.

Держитесь подальше, пока они вам не понадобятся.

9
ответ дан 30 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: