The Abstract Factory design pattern solves problems like:
How can a class be independent of how the objects it requires are created?
How can different families of related or dependent objects be created?
See Applicability section for all problems Abstract Factory can solve. See Solution section for how Abstract Factory solves the problems.

Background Information