El ejemplo de la vida real se proporciona en el espacio de nombres System.Data.Common que tiene clases base abstractas que incluyen DbConnection, DbCommand y DbDataAdapter y son compartidas por los proveedores de datos de .NET Framework, como System.Data.SqlClient y System.Data.OracleClient que permitir a un desarrollador escribir código genérico de acceso a datos que no dependa de un proveedor de datos específico.
La clase DbProviderFactories proporciona métodos estáticos para crear una instancia de DbProviderFactory. La instancia luego devuelve un objeto correcto fuertemente tipado basado en la información del proveedor y la cadena de conexión suministrada en tiempo de ejecución.
Ejemplo:
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;
Ejemplo 2
Arquitectura de solución de código
Se proporcionan instancias de fábrica de concreto utilizando el método de fábrica estático como se muestra a continuación
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");
}
}