C#工厂模式的实现

开发 后端
本文介绍用swith case语句来实现不同的创建connection ,command 和adapater的方法,然后说是C#工厂模式的实现。

上午看到一个兄弟的文章,很辛苦的想实现不改代码只改配置来访问不同类型的数据库,自己去实现C#工厂模式。精神可嘉,但是殊不知C#已经自己为不同类型数据库的访问做了一个工厂。在这里我就把使用工厂的例子贴出来供不知道的兄弟参考一下,高手们可以忽略了。

首先是配置文件:其中的providerName就是指定的不同数据库类型

  1. <connectionStrings> 
  2. <addnameaddname="..."connectionString="..."providerName="System.Data.OleDb"/> 
  3.  
  4. <addnameaddname="..."connectionString="..."providerName="System.Data.SqlClient"/> 
  5. </connectionStrings> 

下面看一下使用工厂的这个类:

  1. classDataBaseFac  
  2. {  
  3. privateDbConnectioncnn;//抽象类型  
  4. privateDbCommandcmd;//抽象类型  
  5. privateDbProviderFactoryprovider;  
  6. publicDataBaseFac()  
  7. {  
  8.  
  9. //从配置文件中取出标示数据库类型的字符串  
  10. stringproviderName=ConfigurationManager.ConnectionStrings[1].ProviderName;  
  11.  
  12. //根据上一部的结果工厂创建一个对应的实例  
  13. provider=DbProviderFactories.GetFactory(providerName);  
  14.  
  15. //使用该实例就可以创建对应的connection,command和adapater对象了  
  16.  
  17. //调试的时候可以看到这几个对象都变成了相应于数据库类型的  
  18. cnn=provider.CreateConnection();  
  19. cnn.ConnectionString=ConfigurationManager.ConnectionStrings[1].ConnectionString;  
  20. cmd=provider.CreateCommand();  
  21. cmd.Connection=cnn;  
  22. }  
  23.  
  24. //执行一次查询,返回数据表  
  25.  
  26. publicDataTableExcuteQuery(stringqueryString)  
  27. {  
  28. DataTableresult=newDataTable();  
  29. DbDataAdapteradapter=provider.CreateDataAdapter();  
  30. cmd.CommandType=CommandType.Text;  
  31. cmd.CommandText=queryString;  
  32. adapter.SelectCommand=cmd;  
  33. try  
  34. {  
  35. cnn.Open();  
  36. adapter.Fill(result);  
  37. }  
  38. catch  
  39. {  
  40. result=null;  
  41. }  
  42. finally  
  43. {  
  44. cnn.Close();  
  45. }  
  46. returnresult;  
  47.  

以上只是简单的应用,并没有做比较高级的封装,只供不知道的兄弟参考。

顺便说说,上午看到那个兄弟的文章用swith case语句来实现不同的创建connection ,command 和adapater的方法,然后说是C#工厂模式的实现。其实这是完全错误的,C#工厂模式的提出就是为了避免这么多swith case造成的麻烦。以后有时间我会把几个常用的模式的提出原因和应用场合总结一下用C#做几个例子给不清楚的兄弟贴出来的。

【编辑推荐】

  1. C#抽象类-特殊的类
  2. 介绍C#直接插入排序
  3. C#数据结构的排序算法
  4. 全面介绍C#指针操作
  5. 概述C#中的Assembly
责任编辑:佚名 来源: IT168
相关推荐

2009-08-25 18:04:30

C#实现Singlet

2024-03-06 13:19:19

工厂模式Python函数

2011-03-29 09:14:49

Dispose模式C#

2021-03-06 22:50:58

设计模式抽象

2011-03-17 15:59:37

c#数据库

2009-09-16 09:06:16

Specificati

2009-08-31 16:12:02

C#使用Singlet

2009-08-26 10:24:04

C# Observer

2011-11-17 16:03:05

Java工厂模式Clojure

2023-03-27 00:20:48

2009-09-01 18:29:10

C#继承C#多态

2009-08-26 09:54:45

C#打印预览C#打印

2022-05-09 08:04:50

工厂模式设计模式

2009-04-29 09:06:18

C#设计模式Adapter

2009-09-07 04:59:12

C#模式窗体

2009-08-26 16:26:37

C#迭代器模式

2009-08-11 13:59:41

迭代器模式C# Iterator

2009-08-03 16:35:30

C#日期比较

2022-01-12 13:33:25

工厂模式设计

2020-08-21 07:23:50

工厂模式设计
点赞
收藏

51CTO技术栈公众号