工厂方法模式。在这里大概讲一下。
1. 首先定义抽象工厂,创建产品,在这里是数据库连接的实例。
在此可以例如
public
abstract
class
DatabaseFactory
{
public AbstractDatabase Create;
}
}
{
public AbstractDatabase Create;
}
}
2.然后定义具体工厂,实现创建方法,具体工厂创建具体产品。
目前只写 oracle的
public
class
OracleFactory:DatabaseFactory
{
public override AbstractDatabase Create()
{
// to do
}
}
{
public override AbstractDatabase Create()
{
// to do
}
}
3.首先定义抽象产品,描述都需要什么方法或属性,一般就是创建连接,打开连接,执行sql,查询结果,返回dataset、或dataTable,事务的操作,关闭连接等,可以根据你的需要。目前实例如下
![ContractedBlock.gif](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![ExpandedBlockStart.gif](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
public abstract string DbType
{
get;
}
public abstract DbDataReader ExecuteDbDataReader(string sql);
public abstract DbConnection Connection
{ get; }
public abstract int ExecuteNonQuery(stirng sql, string[] strParams, object[] strValues, bool isProcedure);
public abstract DataSet GetDataSet(string sql,string[] strParams, object[] strValues,bool isProcedure);
public abstract DataTable GetDataTable(string sql, bool isProcedure);
}
4.然后定义具体产品,可以有sqlserver、oracle什么的,继承抽象工厂,实现抽象工厂的方法或属性。
然后定义确定使用哪种具体产品的方法,目前写了不再例举。
5.定义决定使用哪个工厂的控制类,控制方式可以使用传字符串的方式,或者读配置文件,或者其他方式,推荐配置文件,容易修改,灵活。可以采用反射的形式,也可以不用。推荐反射,灵活获得以插件式的灵活性。在此不写代码 了。
思路如此,一切根据实际情况灵活运用,上面写的没有经过实验,都是构思过程,可能有谬误的地方,欢迎大家拍砖,呵呵。
后记:
现在感觉不用工厂方法也可以 ,反而有些麻烦,其实用简单工厂就行,就是由抽象产品和具体产品,然后有一个生产产品的方法(可以使用工厂里的create)就可以。在方法里决定具体使用哪一个产品。产品即数据库的操作定义。