O exemplo da vida real é fornecido no namespace System.Data.Common que possui classes básicas abstratas que incluem DbConnection, DbCommand e DbDataAdapter e são compartilhadas pelos provedores de dados do .NET Framework, como System.Data.SqlClient e System.Data.OracleClient, que permitir que um desenvolvedor escreva código genérico de acesso a dados que não dependa de um provedor de dados específico.
A classe DbProviderFactories fornece métodos estáticos para criar uma instância DbProviderFactory. A instância, em seguida, retorna um objeto de tipagem forte correto, com base nas informações do provedor e na cadeia de conexão fornecida no tempo de execução.
Exemplo:
DataTable allProvidersTable = DbProviderFactories.GetFactoryClasses();

/* Getting SqlClient family members */
DbProviderFactory dbProviderFactory = DbProviderFactories.GetFactory("System.Data.SqlClient");
DbCommand dbCommand = dbProviderFactory.CreateCommand();
DbConnection dbConnection = dbProviderFactory.CreateConnection();
DbDataAdapter dbDataAdapter = dbProviderFactory.CreateDataAdapter();
SqlClientFactory sqlClientFactory = (SqlClientFactory)dbProviderFactory;
SqlConnection sqlConnection = (SqlConnection)dbConnection;
SqlCommand sqlCommand = (SqlCommand) dbCommand;
SqlDataAdapter sqlDataAdapter = (SqlDataAdapter) dbDataAdapter;
/* Getting OracleClient family members*/
dbProviderFactory = DbProviderFactories.GetFactory("System.Data.OracleClient");
dbCommand = dbProviderFactory.CreateCommand();
dbConnection = dbProviderFactory.CreateConnection();
dbDataAdapter = dbProviderFactory.CreateDataAdapter();
OracleClientFactory oracleClientFactory = (OracleClientFactory)dbProviderFactory;
OracleConnection oracleConnection = (OracleConnection)dbConnection;
OracleCommand oracleCommand = (OracleCommand)dbCommand;
OracleDataAdapter oracleDataAdapter = (OracleDataAdapter)dbDataAdapter;
Exemplo-2

Arquitetura de solução de código

As instâncias de fábrica de concreto são fornecidas usando o método estático de fábrica, conforme abaixo
public class FurnitureProviderFactory
{
public static IFurnitureFactory GetFactory(string furnitureType)
{
if (furnitureType == "Wood")
{
return new WoodenFurnitureFactory();
}
if (furnitureType == "Plastic")
{
return new PlasticFurnitureFactory();
}
throw new Exception("Undefined Furniture");
}
}