It seems as though you could either use static factory methods or you can use an interface that many objects implement to make it easier for users (or yourself) to instantiate the correct object.
Therefore, it seems to be a decision between, on the one hand, having giant objects with many static factory methods or on the other hand, having an interface that many different objects implement, so many so it would becomes hard for the user to know where to even start.
Example 2: A class with many static factory methods:
FooObj foo01 = FooObj.bigFoo();
FooObj foo02 = FooObj.smallFoo();
Example 1: An interface with many classes that implement the interface.
Foo foo1 = new BigFoo();
Foo foo2 = new SmallFoo();
The question which you are thinking is answered in the famous book. Effective Java, 3rd Edition by Joshua Bloch. Note that Joshua Bloch is also developer of multiple Java SE classes as well.
Quoting from the book:
Joshua gives following reasons for using static factory method in place of the constructors
Joshua also tells problems with the static factory methods
Java.util.Collections can be seen as an example for static factory method. Quoting from the book
Further the author echoes your thoughts
Java Standard Library makes extensive use of the static factory method because of the advantages suggested by Joshua Bloch. Another example is the valueOf function in the java.lang.Boolean class. The valueOf static factory method beautifully provide you the same object again and again (basically caching)