You will probably find yourself needing to implement the abstract factory pattern when your program needs different concrete class implementations behind the same interface. Instead of writing the logic in terms of concrete classes, this will let you write programs based on exposed interfaces.
At runtime, the abstract factory will let you easily swap and choose concrete classes when they are instantiated at a single point, instead of writing lengthy and unmaintainable code.
To illustrate this, we'll use an example that you may relate to: registering push notifications and keeping up with changing APIs in a cross-platform environment.