Почему класс Java Pattern использует фабричный метод, а не конструктор?

StackOverflow https://stackoverflow.com/questions/855518

  •  21-08-2019
  •  | 
  •  

Вопрос

Это хорошо обсуждается в общем случае .

Однако мне было интересно, почему Pattern использует compile статический метод для создания объекта, а не конструктор?

Мне кажется более интуитивно понятным использование конструктора.

Это было полезно?

Решение

Класс Pattern новее, чем многие вещи в JDK.Таким образом, я считаю, что они приняли более современный подход использования фабричных методов, а не старый подход публичных конструкторов.На самом деле вы не можете модифицировать фабричные методы для существующих классов.

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

Другие советы

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

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

Подробнее см. http://en.wikipedia.org/wiki/Factory_method_pattern , особеннораздел "Другие преимущества и варианты"

Использование фабричного метода для генерации кода кода также может в конечном итоге позволить использовать реализацию регулярного выражения стороннего плагина.К сожалению, Sun не реализовала ни одну из функций, которые вы могли бы получить при использовании фабричного метода (возможность расширения, кеширование).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top