- 浏览: 242644 次
- 性别:
- 来自: ph
文章分类
最新评论
-
zrj_software:
说了等于没说,LZ能否把DLL代码给我研究下啊30729375 ...
如何在Delphi中调用.Net编写的DLL中的函数 -
reyesyang:
正在查找ruby单例模式相关资料,很有帮助,谢谢。
ruby中的单例模式 -
chaochao_pc:
您好,您的通讯工具能传输文件吗? 我在上边好像没找到!!! ...
Silverlight Socket 实现收发信息 -
huaxia524151:
谢谢,解决问题。return self.name.encode ...
Django笔记5(管理站点) -
yahon:
在flash中如何获取呢?
Flash+html--网页向FLASH传递参数
七、.NET 2.0中的抽象工厂模式
.NET 2.0相比.NET 1.1有很大的改进,就在ADO.NET上来说吧,提供了一套新的操作接口。下面我就简单的介绍下这套接口的设计,在System.Date下提供了 IDbConnection 、IDbCommand、IDbDataAdapter以及IDbTransaction这样一系列接口,通过ProviderFactory来完成具体 实现对象的创建,这里就是抽象工厂模式的一个应用。示意性代码:
1public IDbConnection CreateConnection()
2{
3 IDbConnection conn = null;
4 try
5 {
6 conn = (IDbConnection)Activator.CreateInstance(_connectionTypes[(int)_provider]);
7 }
8 catch(TargetInvocationException e)
9 {
10 throw new Exception(e.Message);
11 }
12 return conn;
13}
14
15public IDbConnection CreateConnection(string connectionString)
16{
17 IDbConnection conn = null;
18 object[] param ={ connectionString };
19 try
20 {
21 conn = (IDbConnection)Activator.CreateInstance(_connectionTypes[(int)_provider], param);
22 }
23 catch (TargetInvocationException e)
24 {
25 throw new Exception(e.Message);
26 }
27 return conn;
28}
在_connectionTypes数组里存放的是IDbConnection接口的具体实现类型,如下:
private static Type[] _connectionTypes = new Type[] { typeof(OleDbConnection), typeof(SqlConnection) };
由于Command,DataAdapter等对象的代码都和上面很相似,这里就不作过多解释,我把代码贴到下面,有兴趣的看看:
ProviderFactory
1using System;
2using System.Data;
3using System.Configuration;
4using System.Web;
5using System.Web.Security;
6using System.Web.UI;
7using System.Web.UI.WebControls;
8using System.Web.UI.WebControls.WebParts;
9using System.Web.UI.HtmlControls;
10using System.Reflection;
11using System.Data.OleDb;
12using System.Data.SqlClient;
13
14/**//// <summary>
15/// ProviderFactory 的摘要说明
16/// </summary>
17public class ProviderFactory
18{
19 /**//// <summary>
20 /// 私有构造器,伪单例。
21 /// 一个具体的工厂通常是一个单件(Singleton)。
22 /// </summary>
23 private ProviderFactory()
24 {
25
26 }
27
28 public ProviderFactory(ProviderType provider)
29 {
30 _provider = provider;
31 }
32
33 private static Type[] _connectionTypes = new Type[] { typeof(OleDbConnection), typeof(SqlConnection) };
34 private static Type[] _commandTypes = new Type[] { typeof(OleDbCommand), typeof(SqlCommand) };
35 private static Type[] _dataAdapterTypes = new Type[] { typeof(OleDbDataAdapter), typeof(SqlDataAdapter) };
36 private static Type[] _dataParameterTypes = new Type[] { typeof(OleDbParameter), typeof(SqlParameter) };
37
38 private ProviderType _provider;
39 public ProviderType Provider
40 {
41 get { return _provider; }
42 set { _provider = value; }
43 }
44
45 public IDbConnection CreateConnection()
46 {
47 IDbConnection conn = null;
48 try
49 {
50 conn = (IDbConnection)Activator.CreateInstance(_connectionTypes[(int)_provider]);
51 }
52 catch(TargetInvocationException e)
53 {
54 throw new Exception(e.Message);
55 }
56 return conn;
57 }
58
59 public IDbConnection CreateConnection(string connectionString)
60 {
61 IDbConnection conn = null;
62 object[] param ={ connectionString };
63 try
64 {
65 conn = (IDbConnection)Activator.CreateInstance(_connectionTypes[(int)_provider], param);
66 }
67 catch (TargetInvocationException e)
68 {
69 throw new Exception(e.Message);
70 }
71 return conn;
72 }
73
74 public IDbCommand CreateCommand()
75 {
76 IDbCommand cmd = null;
77 try
78 {
79 cmd = (IDbCommand)Activator.CreateInstance(_commandTypes[(int)_provider]);
80 }
81 catch (TargetInvocationException e)
82 {
83 throw new Exception(e.Message);
84 }
85 return cmd;
86 }
87
88 public IDbCommand CreateCommand(string cmdText)
89 {
90 IDbCommand cmd = null;
91 object[] args = { cmdText };
92 try
93 {
94 cmd = (IDbCommand)Activator.CreateInstance(_commandTypes[(int)_provider], args);
95 }
96 catch (TargetInvocationException e)
97 {
98 throw new Exception(e.Message);
99 }
100 return cmd;
101 }
102
103 public IDbCommand CreateCommand(string cmdText, IDbConnection connection)
104 {
105 IDbCommand cmd = null;
106 object[] args = { cmdText, connection };
107 try
108 {
109 cmd = (IDbCommand)Activator.CreateInstance(_commandTypes[(int)_provider], args);
110 }
111 catch (TargetInvocationException e)
112 {
113 throw new Exception(e.Message);
114 }
115 return cmd;
116 }
117
118 public IDbCommand CreateCommand(string cmdText, IDbConnection connection, IDbTransaction transaction)
119 {
120 IDbCommand cmd = null;
121 object[] args = { cmdText, connection, transaction };
122 try
123 {
124 cmd = (IDbCommand)Activator.CreateInstance(_commandTypes[(int)_provider], args);
125 }
126 catch (TargetInvocationException e)
127 {
128 throw new Exception(e.Message);
129 }
130 return cmd;
131 }
132
133 public IDbDataAdapter CreateDataAdapter()
134 {
135 IDbDataAdapter da = null;
136 try
137 {
138 da = (IDbDataAdapter)Activator.CreateInstance(_dataAdapterTypes[(int)_provider]);
139 }
140 catch (TargetInvocationException e)
141 {
142 throw new SystemException(e.InnerException.Message, e.InnerException);
143 }
144 return da;
145 }
146
147 public IDbDataAdapter CreateDataAdapter(IDbCommand selectCommand)
148 {
149 IDbDataAdapter da = null;
150 object[] args = { selectCommand };
151 try
152 {
153 da = (IDbDataAdapter)Activator.CreateInstance(_dataAdapterTypes[(int)_provider], args);
154 }
155 catch (TargetInvocationException e)
156 {
157 throw new SystemException(e.InnerException.Message, e.InnerException);
158 }
159 return da;
160 }
161
162 public IDbDataAdapter CreateDataAdapter(string selectCommandText, IDbConnection selectConnection)
163 {
164 IDbDataAdapter da = null;
165 object[] args = { selectCommandText, selectConnection };
166 try
167 {
168 da = (IDbDataAdapter)Activator.CreateInstance(_dataAdapterTypes[(int)_provider], args);
169 }
170 catch (TargetInvocationException e)
171 {
172 throw new SystemException(e.InnerException.Message, e.InnerException);
173 }
174 return da;
175 }
176
177 public IDbDataAdapter CreateDataAdapter(string selectCommandText, string selectConnectionString)
178 {
179 IDbDataAdapter da = null;
180 object[] args = { selectCommandText, selectConnectionString };
181 try
182 {
183 da = (IDbDataAdapter)Activator.CreateInstance(_dataAdapterTypes[(int)_provider], args);
184 }
185 catch (TargetInvocationException e)
186 {
187 throw new SystemException(e.InnerException.Message, e.InnerException);
188 }
189 return da;
190 }
191
192 public IDbDataParameter CreateDataParameter()
193 {
194 IDbDataParameter param = null;
195 try
196 {
197 param = (IDbDataParameter)Activator.CreateInstance(_dataParameterTypes[(int)_provider]);
198 }
199 catch (TargetInvocationException e)
200 {
201 throw new SystemException(e.InnerException.Message, e.InnerException);
202 }
203 return param;
204 }
205
206 public IDbDataParameter CreateDataParameter(string parameterName, object value)
207 {
208 IDbDataParameter param = null;
209 object[] args = { parameterName, value };
210 try
211 {
212 param = (IDbDataParameter)Activator.CreateInstance(_dataParameterTypes[(int)_provider], args);
213 }
214 catch (TargetInvocationException e)
215 {
216 throw new SystemException(e.InnerException.Message, e.InnerException);
217 }
218 return param;
219 }
220
221 public IDbDataParameter CreateDataParameter(string parameterName, DbType dataType)
222 {
223 IDbDataParameter param = CreateDataParameter();
224 if (param != null)
225 {
226 param.ParameterName = parameterName;
227 param.DbType = dataType;
228 }
229 return param;
230 }
231
232 public IDbDataParameter CreateDataParameter(string parameterName, DbType dataType, int size)
233 {
234 IDbDataParameter param = CreateDataParameter();
235 if (param != null)
236 {
237 param.ParameterName = parameterName;
238 param.DbType = dataType;
239 param.Size = size;
240 }
241 return param;
242 }
243
244 public IDbDataParameter CreateDataParameter(string parameterName, DbType dataType, int size, string sourceColumn)
245 {
246 IDbDataParameter param = CreateDataParameter();
247 if (param != null)
248 {
249 param.ParameterName = parameterName;
250 param.DbType = dataType;
251 param.Size = size;
252 param.SourceColumn = sourceColumn;
253 }
254 return param;
255 }
256}
关于.NET 2.0的这一知识点不了解的朋友可以下载Web Cast课程进行学习。本文就简单的介绍这些。
七、.NET 2.0中的新ADO.NET操作接口应用示例
建立一ASP.NET网站项目,在默认的Default.aspx里放置一个GridView控件便OK。这里以MSSQL 2000里的Northwind数据库作为示例数据库,查询出订单表的数据呈现在aspx页面上,进入后台代码文件(.cs文件):
1public partial class _Default : System.Web.UI.Page
2{
3 protected void Page_Load(object sender, EventArgs e)
4 {
5 string connectionString="Data Source=.;Initial Catalog=Northwind;user id=sa;password=;";
6 string cmdText = "select * from orders";
7
8 ProviderFactory factory = new ProviderFactory(ProviderType.SqlClient);
9 IDbConnection conn = factory.CreateConnection(connectionString);
10 IDbDataAdapter sda = factory.CreateDataAdapter(cmdText, conn);
11 DataSet ds = new DataSet();
12 sda.Fill(ds);
13 this.GridView1.DataSource = ds.Tables[0];
14 this.GridView1.DataBind();
15 }
16}
ProviderFactory担任着工厂的角色,负责创建如IDbConnection、IDbCommand等一系列的产品。如上,我们拿到了工厂 角色,通过工厂角色的CreateConnection就创建到了一个基于抽象产品角色IDbConnection接口的实现对象(具体是什么实现对象我 们暂不管)。
.NET 2.0提供了这一套操作接口,对于程序实现上就更加灵活了,更是强调了使用“依赖接口/抽象编程”的思想。
注:转载请注明出处:http://beniao.cnblogs.com/
发表评论
-
设计模式之抽象工厂模式(一)
2009-07-29 15:45 951一、模式描述 我的程序中有需要一系列的对象,比如我们要 ... -
设计模式之建造者模式(二)
2009-07-29 15:36 902五、 建造者模式的实现: 下面的程序代码演示 ... -
设计模式之建造者模式(一)
2009-07-29 15:35 1310建造者模式可以将一个产品的内部表象与产品的生成过程分割开来 ... -
设计模式之原型模式
2009-07-22 17:19 892原型模式是通过现有的一个对象,复制出更多的此类型的对象以供使用 ... -
设计模式之工厂方法模式
2009-07-22 17:12 811一、 工厂方法(Factory Method) ... -
设计模式之单例模式
2009-07-22 16:51 860单例模式是一种创建型模式,所谓创建型模式就是对实例 ... -
设计模式之装饰者模式
2009-07-22 12:31 8821、定义及作用 该模式以对客户端透明的方式扩 ... -
设计模式之组合模式
2009-07-20 15:31 881Composite 组合模式主要 ... -
设计模式之外观模式
2009-07-20 14:31 818Facade 外 观模式,是一种结构型模式,它主要解决的问 ... -
设计模式之桥接模式
2009-07-18 11:15 1175概述 软件开发网 ww ... -
设计模式之适配器模式
2009-07-18 10:51 882适配器(Adapter)模式 定义:适配器模式把一个类的接口 ... -
设计模式之代理模式
2009-07-18 10:32 826代理模式(Proxy Pattern) ——.NET设计 ... -
设计模式之享元模式
2009-07-18 10:21 1066一、 享元(Flyweight)模式(转贴) Flyweig ...
相关推荐
抽象工厂设计模式抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式
在Java中,抽象工厂模式通常用于创建一组相关的或相互依赖的对象,而无需指定它们的具体类。这种模式的关键在于抽象工厂类,它定义了一组接口,用于创建不同产品族的实例。产品族是一组相关或相互依赖的对象,而产品...
总之,"走进设计模式之抽象工厂"这篇博客深入探讨了抽象工厂模式的原理、实现方式、应用场景及其优缺点,旨在帮助读者理解并有效地运用这一设计模式。通过阅读博客和分析提供的代码示例,开发者可以更好地掌握抽象...
抽象工厂模式是设计模式中的一种,属于创建型模式,它的主要目的是为了解决在软件系统中,面对一系列相互依赖的对象的创建问题。这种模式提供了一个创建一系列相关或相互依赖对象的接口,而不必指定它们的具体类。...
抽象工厂模式是设计模式中的一种,尤其适用于创建一组相关或相互依赖的对象。这个实例Demo将向我们展示如何在iOS环境中应用抽象工厂模式。 抽象工厂模式的核心思想是提供一个接口,用于创建一系列相关或相互依赖的...
工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 1. **简单工厂模式** 简单工厂模式是最简单的工厂模式实现,它提供一个静态方法或者类来创建对象,这个类通常被称为“工厂”。用户只需要...
设计模式 - 抽象工厂模式 抽象工厂模式是一种创建型设计模式,它提供了一种方式来创建一组相关或相互依赖的对象,而不需要指定具体的类。该模式允许客户端使用抽象的接口来创建一组相关的产品,而不需要关系实际...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式允许系统独立于如何创建、组合和表示产品对象的细节进行设计,为产品族(一组相关或相互依赖的对象)提供...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象族的接口,而无需指定其具体的类。这种模式的关键在于“族”,即一系列相关的对象。在抽象工厂模式中,我们创建一个抽象工厂接口,然后为每一种具体...
java设计模式之抽象工厂模式实例,希望对大家有所帮助。
抽象工厂模式是设计模式中的一种创建型模式,它提供了一种创建对象集合的接口,而无需指定具体类。这种模式允许客户端使用一个通用接口来创建一组相关或相互依赖的对象,而无需了解它们的具体实现。在Java中,抽象...
在软件设计模式中,工厂模式是一组非常基础且实用的设计模式,主要分为简单工厂模式、工厂方法模式和抽象工厂模式。这些模式都是为了解决对象创建的问题,通过封装对象的创建过程,使得代码更加灵活,易于扩展和维护...
抽象工厂模式是设计模式中的一种,它属于创建型模式,主要解决的是当系统有多个产品族,而每个产品族又有多个具体产品时,如何组织代码的问题。在Java中,抽象工厂模式提供了一种创建对象组的方式,使得这些对象属于...
实验的核心在于理解和实践**抽象工厂模式**,这是一种常用的面向对象设计模式,旨在解决软件设计中的灵活性和扩展性问题。实验的目标包括: 1. **深入理解抽象工厂模式的基本概念和原理**:通过理论学习和实际操作...
单例设计模式、工厂设计模式和抽象工厂模式是常见的软件开发设计模式。这些设计模式提供了一些有用的思想和实现方式,可以帮助开发人员在设计和实现复杂的软件系统时,更加灵活和高效地进行编程。 单例设计模式是一...
设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂...
抽象工厂模式是设计模式中的一种创建型模式,它提供了一个创建对象族的接口,而无需指定它们的具体类。在.NET开发中,这种模式常用于实现多数据库连接,比如连接到MySQL、SQL Server或Oracle等不同的数据库系统。...
抽象工厂模式是最为复杂的一种工厂模式,它提供了创建相关或依赖对象的家族,而无需指定它们的具体类。这种模式主要用于当产品族中的对象需要一起使用时,确保它们都属于同一产品等级结构。抽象工厂可以确保客户端...
设计模式专题之(三)抽象工厂模式---设计模式抽象工厂模式示例代码(python--c++)
总结来说,Java设计模式之抽象工厂模式是一种用来创建一系列相关对象的设计模式,它通过提供抽象工厂接口来隔离具体产品的创建,使系统具备更好的扩展性和封装性。在实际开发中,我们可以根据需求选择使用抽象工厂...