Множество ответов, но, похоже, ни один из них не дает четкого различия между двумя моделями. Позвольте мне попробовать и посмотреть, не могу ли я еще больше запутать вопрос.
Singleton - это шаблон, который ограничивает вашу систему созданием только одного экземпляра данного класса. Ограничение обычно реализуется путем создания фабрики, которая либо создает экземпляр класса (если его еще нет), либо возвращает уже созданный экземпляр при последующих вызовах.
Фабрика используется для создания синглетонов и в других ситуациях. Его можно использовать для замены «нового» во многих случаях. Одним из преимуществ является то, что вы можете написать свою фабрику, чтобы тип возвращаемого объекта был «Set». Таким образом, ваша инфраструктура тестирования может «установить» фиктивный объект вместо реального - и тогда вся остальная часть вашей системы будет использовать фиктивный объект.
Другим случаем может быть фабричная оценка по параметрам, тип которых должен возвращаться, или по данным (возможно, XML). Они также используются для внедрения Dependency Injection, когда фабрика смотрит на то, что вам нужно, и строит цепочки объектов для удовлетворения этих потребностей.