Множество фабричных методов используются для предложения экземпляра самого класса без экспорта классом каких-либо конструкторов (см., Например, Josh Bloch item 1 ). Если бы фабричный метод был методом экземпляра, у вас не было бы объекта класса для начала.
Кроме того, getInstance()
обычно не зависит от любого существующего экземпляра, поэтому он должен быть объявлен как статический. Если это зависит от одного, часто предпочтительным является прототип (т.е. clone()
).
Наконец, вы должны различать фабричный метод public static getInstance()
и абстрактную фабрику , которая является классом, который часто скрывает детали реализации для нескольких интерфейсов. Конечно, вы должны иметь возможность создавать экземпляры подклассов абстрактной фабрики. Вы можете найти отличное введение в шаблоны творчества («Абстрактная фабрика», «Фабричный метод», «Прототип» и др.) В книге «Классические шаблоны проектирования» из «Банды четырех» . Также приведен пример нестатического фабричного метода, смешанного с прототипом. Итак, вы видите, много вариантов возможно ...