Подготовленные записи используют '?' в MySQL, чтобы обеспечить привязку параметров к инструкции. При правильном использовании он считается более защищенным от инъекций SQL. Это также позволяет выполнять более быстрые SQL-запросы, поскольку запрос должен быть только один раз компилирован и может быть повторно использован.
Я не верю, что существует такая вещь, как «строгое определение» паттерна. По своей природе существуют модели, позволяющие уловить суть проблемы, которая снова и снова возникает в программном обеспечении, и наметить, как может выглядеть решение.
В частности, для фабричного шаблона нет требования, чтобы фабричные методы были статическими. Суть шаблона в том, что у вас есть один объект, который отвечает за создание экземпляров другого класса. Как вы это сделаете, зависит только от вас, хотя распространенный способ, как описано в шаблоне, состоит в использовании статического метода в классе. Тем не менее, у нас есть заводской механизм в одной из наших систем, который на самом деле является двухступенчатым. Вы используете статический метод в классе для создания объекта фабрики, который может быть настроен на выбор из набора реализаций, а затем используете объект фабрики, чтобы исключить экземпляры объекта, которые необходимы для реальной работы.
Также рассмотрим реализацию фабричного шаблона на языке, который не имеет статических методов. Например, в Scala вы бы использовали объект вместо класса. Хотя поведение этого очень похоже на использование статических методов в классе в Java, природа реализации совершенно иная.
Нет, фабричный класс по умолчанию не должен быть статическим. На самом деле, статические классы не приветствуются в мире ООП, поскольку они также могут передавать некоторое состояние и, следовательно, вводить глобальное состояние приложения. Если вам нужен только один фабричный объект, вы можете управлять его созданием с помощью одноэлементного шаблона.
В случае фабричного метода - нормально держать его статичным (на самом деле другого разумного пути нет:)).
Использование Static Method
не связано с каким-либо шаблоном проектирования. Это выбор: мы используем метод Class level
или метод уровня экземпляра. Factory
Класс не требует поддержания какого-либо состояния. Так что обычно мы идем на Static method
. Если это действительно требует state
, то мы создаем объект для класса и устанавливаем состояние для объекта. На этот раз мы можем выбрать метод static
или instance
.
Я предполагаю, что моя BlueCarFactory
и моя RedCarFactory
имеют метод createCar
. Это просто здравый смысл - повторно использовать фактический метод создания, параметризовав его. Затем можно создать CarFactory (синий)
и CarFactory (красный)
. Это означает, что объекту CarFactory
требуется переменная-член для хранения цвета произведенных автомобилей.
Заключение: нет смысла делать метод класса Factory статическим. Имеет смысл создать одноэлементный объект Factory.
Нет, фабрики могут сохранять состояние. Это зависит от того, что нужно.
Я бы сказал, что создание статики кажется хорошим выбором в первую очередь - но в тот момент, когда вы пытаетесь провести модульную проверку статики, вы, как правило, сталкиваетесь с проблемами.
Держитесь подальше, пока они вам не понадобятся.