Синглтоны не обеспечивают единого интерфейса;они гарантируют единственный экземпляр объекта, который доступен глобально для других объектов.Пример того, где вы можете использовать синглтон, - это когда вам нужен счетчик, доступный из любого места приложения.Другими словами, состояние этого единственного объекта поддерживается в течение всего времени жизни приложения.
С другой стороны, фабрики используются для создания объекта, в котором вы не обязательно знаете точный тип возвращаемого класса.Например, у вас может быть фабрика, которая возвращает автомобильный объект, но точный класс, который возвращается, может быть Volkswagen или Ferrari.
Фабрики часто используются для внедрения зависимостей (DI).Таким образом, в приведенном вами примере вы можете использовать фабрику для возврата объекта, который взаимодействует с БД, но фактический класс может взаимодействовать с БД с помощью операторов SQL или, возможно, это другой класс, который использует инфраструктуру объектно-реляционного отображения (ORM),Это отделяет фактический интерфейс / реализацию базы данных от остальной части приложения и обеспечивает большую гибкость при изменениях доступа к БД в будущем.Фабрика может даже вернуть макет доступа к БД, который можно использовать для модульного тестирования.DI может использоваться для изменения того, какой метод используется во время выполнения.Я бы определенно рекомендовал использовать фабрики по этим причинам.
Фабрики также могут возвращать синглтоны.Таким образом, вопрос, который необходимо задать при определении, нужен ли вам синглтон, заключается в том, нужно ли мне поддерживать состояние во всем приложении для всех объектов, которые будут иметь к нему доступ.Примером желания поддерживать состояние является то, что вы хотите сохранить соединение открытым с базой данных для любого объекта, который обращается к этому объекту БД в течение всего жизненного цикла приложения.Не предлагает вам делать это, но это всего лишь пример того, почему вы можете захотеть сохранить информацию о состоянии этого объекта в течение жизни приложения.