加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

.Net简单工厂模式

发布时间:2020-12-12 15:50:58 所属栏目:MsSql教程 来源:网络整理
导读:?最近这几天,老大让我开发一个网站,当然用的是工厂模式了,呵呵,以前都没有接触过设计模式,所以现在也只有赶紧找些资料看看了! ? 简单工厂又称静态工厂,具体使用如下: 首先定义一个接口,具体名为Idatabase,在这个接口中,定义好数据库操作的方法名和参

?最近这几天,老大让我开发一个网站,当然用的是工厂模式了,呵呵,以前都没有接触过设计模式,所以现在也只有赶紧找些资料看看了!

?

简单工厂又称静态工厂,具体使用如下:

首先定义一个接口,具体名为Idatabase,在这个接口中,定义好数据库操作的方法名和参数,以及返回值,本案例中我定义如下方法:

public interface IDatabase 
{ 
bool Connect(string ConnectString); 
bool Open(); 
bool Command(string SQL); 
void Close(); 
}

重要提醒:“接口一生唯谨慎,定义大事不糊涂”,编写接口时一定要考虑周全,并对参数、返回值进行反复推敲,为什么?因为所有的实现类都是要根据该接口的规范进行代码具体编写,也即接口的定义是公用的,一旦改动了接口,后果就是所有的实现类也都必须相应调整。

然后就是编写具体的实现类了,客户要求多少不同类型的数据库,你就定义多少个Idatabase的实现类,虽然工作量大了点,可当你看到客户满意的笑容时,你心里也就会有一种由衷的幸福感,好了,SqlServer实现类代码如下:


?

///
///生产工厂(接口)的第一个产品
///
public class SqlServer : IDatabase 
{ 
SqlConnection conn; 
SqlCommand command; 
//实现接口的数据库连接方法
public bool Connect(string ConnectString) 
{ 
try 
{ 
conn = new SqlConnection(ConnectString); 
return true; 
} 
catch(SqlException) 
{ 
return false;
} 
} 
//实现接口的打开连接方法
public bool Open() 
{ 
try 
{ 
conn.Open(); 
return true; 
} 
catch(SqlException) 
{ 
return false; 
} 
} 
//实现接口的执行数据库命令方法
public bool Command(string SQL) 
{ 
try 
{ 
command = new SqlCommand(SQL,conn); 
command.ExecuteNonQuery();
return true; 
} 
catch(SqlException) 
{ 
return false;
} 
} 
//实现接口的关闭数据库连接方法
public void Close() 
{ 
conn.Close(); 
conn.Dispose(); 
} 
} 

呵呵,有点长,咬着牙读完,心里明白了就会很舒服的,如果你现在有这种感觉了,好,再接再厉,再为Oracle实现类编写具体代码吧,依葫芦画瓢,大家有空就画一下吧,我就画个雏形了:

///
///生产工厂的第二各产品
/// 
public class Oracle : IDatabase 
{ 
public Oracle() 
{ 
//......
} 
//实现接口的数据库连接方法
public bool Connect(string ConnectString) 
{ 
return true; 
} 
//实现接口的打开连接方法
public bool Open() 
{ 
return true; 
}
//实现接口的执行数据库命令方法
public bool Command(string SQL) 
{ 
return true; 
}
//实现接口的关闭数据库连接方法
public void Close() 
{
//......
} 
} 

嗯,不错,你有多少种数据库就编写不同的实现类代码吧,这里就不赘述了,接下来呢?聪明的读者一定会想到这个问题:这个接口和这么多的实现类怎么用啊?我们再定义一个称之为工厂的类,由它来决定选用哪种数据库为进行操作,这个类比较简单:

public class Factory 
{ 
public static IDatabase SelectDatabase(string DatabaseType) //注意将此方法定位为接口类型
{ 
switch(DatabaseType)
{ 
case "SqlServer":
return new SqlServer(); 
case "Oracle": 
return new Oracle(); 
default: 
return new SqlServer(); 
} 
} 
} 

看明白了吗?好了,我们该让尊敬的、永远高贵的客户出场了,只有他,唯有他才有决定用哪种数据库的最高权限,你看,他这样用:

public class Client 
{ 
public static void Main() 
{ 
//Get the database information from Web.Config. 
string DBType = ConfigurationSettings.AppSettings["DBType"]; 
string DBConnectString = ConfigurationSettings.AppSettings["DBConn"]; 
IDatabase DB = Factory.SelectDatabase(DBType); 
//Connect the selected database.
if(DB.Connect(DBConnectString)==false) 
{ 
Console.WriteLine("The database {0} can't be connected.",DBType); 
return; 
} 
//Open database. 
if(DB.Open()==false) 
{ 
Console.WriteLine("The database {0} can't be opened,the connect string is {1}.",DBType,DBConnectString);
return; 
} 
//Execute SQL Command. 
string SQL = "update Order set price = price * 0.07 where productID = '002'"; 
if(DB.Command(SQL)) 
{ 
//Do something... 
} 
else
{ 
Console.WriteLine("The Operator is not success. SQL statament is {0}",SQL); 
DB.Close();
return; 
} 
DB.Close();
} 
} 

OK!以上是一个简单工厂模式实例...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读