Вам нужно как-то скрыть реализацию класса, который вы хотите создать для фабрики, чтобы единственный доступный метод - использовать фабрику.В противном случае вы не сможете остановить людей, непосредственно создающих экземпляры класса.Другой способ - скрыть конструкторы класса, если вы не можете скрыть сам класс.Чаще всего это делается (в Java) с помощью закрытых и пакетных закрытых классов и методов.
Но учтите, что разработчику нередко необходим доступ к классу.Хороший пример может быть в модульном тесте.
Так что, если вы не можете полностью скрыть это, подумайте, как вы можете «отговорить» разработчиков от непосредственного создания его экземпляра, но при этом оставить его доступным для тех случаев, когда им может не понадобиться фабрика.