Why do we need Abstract factory design pattern?

Solution 1:

Abstract Factory is a very central design pattern for Dependency Injection (DI). Here's a list of Stack Overflow questions where application of Abstract Factory has been accepted as the solution.

To the best of my understanding, these questions represent real concerns or problems that people had, so that should get you started with some real-life examples:

  • Is there a pattern for initializing objects created via a DI container
  • Can't combine Factory / DI
  • WCF Dependency injection and abstract factory
  • How to set up IoC when a key class needs Session (or other context-specific variable)
  • How to Resolve type based on end-user configuration value?
  • Strategy Pattern and Dependency Injection using Unity
  • Abstract factory pattern on top of IoC?
  • Is this the correct way to use and test a class that makes use of the factory pattern?
  • DDD Book, Eric Evans: Please explain what is meant by "The FACTORY should be abstracted to the type desired rather than the concrete class(es) created."
  • DI container, factory, or new for ephemeral objects?
  • How to unit test instance creation?
  • What is the best strategy for Dependency Injection of User Input?

Solution 2:

A real life example for the use of the Abstract Factory pattern is providing data access to two different data sources. Assume your application supports different data stores. (e.g. a SQL Database and an XML file). You have two different data access interfaces e.g. an IReadableStoreand IWritableStore defining the common methods expected by your application regardless of the type of data source used.

Which type of data source shall be used shouldn't change the way client code retrieves it's data access classes. Your AbstractDataAccessFactory knows which type of data source is configured and provides a concrete Factory for the client code, i.e. SqlDataAccessFactory or XmlDataAccessFactory. These concrete factories can create the concrete implementations, e.g. SqlReadableStore and SqlWriteableStore.

The DbProviderFactory in .NET Framework is an example of this pattern.