The GOF book says:
Intention
Define an interface for creating an object, but let the subclasses determine which class should be created.
What does it mean? Let's take a look at the example that the book shows.

In this example, the environment defines the Application interface to allow others to implement it. This means that I can implement, for example. a MyApplication or MyOtherApplication as follows:
public class MyApplication extends Application { protected Document createDocument() { return new MyDocument(); } } public class MyOtherApplication extends Application { protected Document createDocument() { return new MyOtherDocument(); } }
When the environment begins, she can choose one of these implementations depending on what she finds on the way to the classes.
But this means that after the framework creates an instance of MyApplication or MyOtherApplication , a way to create a document is created. The way a document is created can no longer be changed at run time for an Application instance. There is no customization or anything else that you can use to change the way you create a Document . Thus, it is also called a virtual constructor and, therefore, is a class template .
Factory Abstract
Unlike the Factory method, the abstract Factory can be modified at runtime and, therefore, as the objects it creates. That is why they say it is an object template .
Abstract Factory is also responsible for creating
... families of related or dependent objects ...
This is also a difference from the factory method . virtual constructor .
René link
source share