就他吧-9ta8为您提供:身份证查询、15位转16位身份证,手机号码归属地查询,IP地址查询服务,城市天气预报查询,
列车时刻表简易快速查询等等查询服务,就他吧欢迎您的光临!!
梦幻Dot Net
科学地研究编程,
品味开发的艺术
博客园
首页
社区
新随笔
联系
订阅
管理
随笔-96 评论-675 文章-7 trackbacks-102
创建型模式之间的比较
在GOF的设计模式中没有
简单工厂
,而是将其作为工厂方法的一个特例加以解释的。可以这样理解,简单工厂是参数化的工厂方法。简单工厂的作用是实例化对象,而不需要客户了解这个对象属于那个具体子类。优点:可以使用户根据参数获得对应的类的实例,避免了用户直接实例化类,降低了耦合性。缺点:可实例化的类型在编译期间已绑定,如果增加新类型,则需要修改工厂。简单工厂需要知道所有要生成的类型,当子类过多或者子类层次过多时不适合使用。
当一个类不知道他所必需创建对象的类或一个类希望有子类指定他所创建的类型时(也就是说一个类中的某个对象需要由子类来创建时),可以使用
工厂方法模式
。优点:工厂方法使类中的代码不依赖于它必须创建的类,代码只知道要创建类的接口。缺点:新增加一个需要创建的类就需要增加一个相应的子类。工厂方法与工厂对象不同,工厂对象的作用是专门负责其他类的实例化,如抽象工厂的对象或者简单工厂的对象,即实例化对象是工厂对象的唯一职责,而工厂方法所存在的类则不同,只有工厂方法负责实例化相关类型的实例。除此之外,这个类的对象还具有其他职责,也就是说除了工厂方法外,还有其他方法。
工厂方法针对的仅仅是一种“产品”,或者称为“类”,而
抽象工厂
实际上针对很多平行的产品,因此层次不同。抽象工厂才是名副其实的“工厂”,即不仅仅只生产一种产品,抽象工厂是层次较高的模式,针对应用中需要使用的一系列相关的类给出一个创建接口。抽象工厂分离了具体的类:(1)是产品系列容易交换,只要更换相应的具体工厂即可(经常用工厂方法来实现);(2)有利于产品的一致性,由抽象工厂创建的产品必须符合相同的接口,任何在子类中的特殊功能都不能体现在统一的接口中;(3)难以支持新产品的类型,如果抽象工厂的基类要发生变化,那么针对每个产品系列的具体工厂也都要发生变化,显然这是很麻烦的。
反射工厂方法
:如果工厂方法仅仅是为了获得某个产品的实例,那么完全可以使用反射技术来实现工厂方法,这样解决了工厂方法潜在的问题,即当增加产品类时,必须增加相应的子类,然而当工厂方法所在的类不仅是实例化产品时,采用反射技术不一定是好办法,因此可能是问题变得复杂。反射工厂的优点:极大地减少了工厂类的数量,降低了代码的冗余,并且系统更容易扩展,在增加新类型后,不需要修改工厂类。使用反射工厂的代价是工厂与产品之间的依赖关系不明显,由于是动态绑定,因此理论上可以用一个工厂完成很多类型的实例化,从而使得代码不容易理解。
生成器模式
(Builder Pattern)把构造对象实例的逻辑移到了类的外部,在这个类的外部定义了这个类的构造逻辑。他把一个复杂对象的构造过程从对象的表示中分离出来。其直接效果是将一个复杂的对象简化为一个比较简单的目标对象。他强调的是产品的构造过程。生成器产生的不一定是一个产品系列的对象,只要对象的创建过程一致即可,而抽象工厂所创建的对象一定是一个产品的系列。
原型模式
(Prototype)和简单工厂等一样,同样对客户隐藏了对象创建工作,但是,与通过对一个类进行实例化来构造新对象不同的是,原型模式是通过拷贝一个现有对象生成新对象的。
以下是利用抽象工厂模式对数据库访问类的优化:
1
public
class
DBUse
2
{
3
DBFactory dbf
=
null
;
4
public
DBUse(
string
dbType)
5
{
6
switch
(dbType.ToLower())
7
{
8
case
"
sql
"
:
9
dbf
=
new
SQLDBFactory();
10
break
;
11
case
"
oracle
"
:
12
dbf
=
new
OracleDBFactory();
13
break
;
14
default
:
15
dbf
=
new
OleDBFactory();
16
break
;
17
}
18
}
19
20
public
DataSet GetDataSet(
string
sql)
21
{
22
DBOperator dbop
=
new
DBOperator(dbf);
23
dbop.Open(
"
connctionstring
"
);
24
return
dbop.ExecSQL(sql);
25
}
26
}
public
class
DBOperator
{
private
DBFactory dbf;
private
IDbConnection dbconn;
public
DBOperator(DBFactory dbf)
{
this
.dbf
=
dbf;
}
public
void
Open(
string
connstring)
{
dbconn
=
dbf.GetDBConnection();
dbconn.ConnectionString
=
connstring;
dbconn.Open();
}
public
DataSet ExecSQL(
string
sql)
{
IDbCommand dbc
=
dbf.GetDBCommand();
dbc.CommandText
=
sql;
dbc.CommandType
=
CommandType.Text;
dbc.Connection
=
dbconn;
IDataAdapter ida
=
dbf.GetDBDataAdapter(dbc);
DataSet ds
=
null
;
ida.Fill(ds);
return
ds;
}
}
public
abstract
class
DBFactory
{
public
abstract
IDbCommand GetDBCommand();
public
abstract
IDbConnection GetDBConnection();
public
abstract
IDataAdapter GetDBDataAdapter(IDbCommand idc);
}
public
class
SQLDBFactory : DBFactory
{
public
SQLDBFactory()
{}
public
override
IDbCommand GetDBCommand()
{
return
new
SqlCommand();
}
public
override
IDbConnection GetDBConnection()
{
return
new
SqlConnection();
}
public
override
IDataAdapter GetDBDataAdapter(IDbCommand idc)
{
return
new
SqlDataAdapter((SqlCommand)idc);
}
}
posted on 2005-10-22 13:23
振河
阅读(2479)
评论(0)
编辑
收藏
所属分类:
.Net设计模式
刷新评论
切换模板
发表评论
昵称:
[登录]
[注册]
主页:
邮箱:
(仅博主可见)
验证码:
看不清,换一个
评论内容:
登录
注册
[使用Ctrl+Enter键快速提交评论]
0
259312
导航:
网站首页
社区
新闻
博问
闪存
网摘
招聘
找找看
Google搜索
China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
China-Pub 计算机绝版图书按需印刷服务
相关文章:
最新IT新闻:
19岁天才黑客发布首个iPhone 3GS破解软件
新浪邮箱大本营粉墨登场!Sina.cn开放注册
IE市场份额首次跌破60%
Google App Engine宕机6小时——云的安全在哪里?
微软新推社交网站Windows Live Planet
相关链接:
清新的空气清晰的你愉快的心情陪伴你,
欢迎来到梦幻Dot Net。
<
2005年10月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
给我留言
查看留言
我参与的团队
Design & Pattern团队(0/0)
.NET 控件与组件开发(0/0)
敏捷软件开发组织(0/0)
北京.NET俱乐部(0/0)
Dot Net Web服务和Windows服务开发(0/0)
正则表达式团队(0/0)
随笔分类
.Net设计模式(21)
ASP.Net(9)
C#(12)
C#2005(3)
DotText
JavaScript(8)
Reporting Services(7)
SD Channel
SQL Server 2000(10)
Visio Studio 2005 WPF(2)
Web and Windows Service(5)
其他(8)
软件工程(7)
正则表达式(2)
随笔档案
2008年12月 (1)
2008年10月 (2)
2008年3月 (1)
2008年1月 (2)
2007年12月 (1)
2007年11月 (1)
2007年10月 (4)
2007年8月 (1)
2007年7月 (1)
2007年5月 (1)
2007年4月 (1)
2007年3月 (1)
2007年1月 (2)
2006年12月 (1)
2006年10月 (1)
2006年9月 (2)
2006年8月 (1)
2006年7月 (1)
2006年4月 (1)
2006年3月 (4)
2006年2月 (1)
2006年1月 (1)
2005年12月 (1)
2005年11月 (1)
2005年10月 (5)
2005年9月 (11)
2005年8月 (36)
2005年7月 (10)
文章分类
ASP.NET(2)
安全与加密(1)
管理(1)
生活(1)
数据库(2)
文章档案
2007年12月 (1)
2005年10月 (1)
2005年9月 (1)
2005年8月 (4)
相册
宝贝动物
精彩贴图
生活餐具
.NET技术网站
ASP.NET开发实践系列课程
ASP酷技术网
CodeProject
KnowDotNet
Visual Studio.net专栏
博客堂
发赛特技术网
酷网博客
孟宪会.NET开发者园地
太平洋开发编程技术与实例
天新网DotNet
新一代技术网
站长中国
正则表达式
中国C#技术网站
中文C#站
其他技术网
ASP.NET Forums 官方中文网站
MSDN中文站
动态网站制作指南
正则表达式网站(Eng)
中国BS网
中国Office Online
中国WEB开发者网络
数据库技术网站
SQL Server 提示与技巧
数据仓库之路
友情连接
就他吧服务
就他吧为您提供软件开发,网站设计,网站开发维护,各种办公软件、管理软件开发等等,详情请进入
http://www.9ta8.com
幽默笑话
笑话大全、智慧快餐、暴笑网文、高笑图片、恐怖故事、幽默短信、相声小品尽在其中,就他吧幽默站开心您每一天
积分与排名
积分 - 312687
排名 - 129
最新评论
1. re: 用实例解说Dot Net设计模式——装饰模式
Protected WithEvents cp As System.Web.UI.HtmlControls.HtmlTableCell
這句翻譯成C#怎麼定義啊 @慢一拍
--铁打的西西。
2. re: 用实例解说Dot Net设计模式——装饰模式
Protected WithEvents cp As System.Web.UI.HtmlControls.HtmlTableCell
這句翻譯成C#怎麼定義啊
--铁打的西西。
3. re: 用实例解说Dot Net设计模式——装饰模式
Protected WithEvents cp As System.Web.UI.HtmlControls.HtmlTableCell
這句翻譯成C#怎麼定義啊
--铁打的西西。
4. re: DotNet WebService和WindowsService团队开通
1.博客园帐户名:Jeriffe2.电子邮件:jiang-fei12356@126.com3.博客园地址:4.申请目的:Web和Windows服务一直是我期望的。...
--Jeriffe
5. re: 分布式数据库概述
顶上先...
--Old
阅读排行榜
1. 全面剖析C#正则表达式(28359)
2. 正则表达式基础知识(27515)
3. C#反射实例讲解(17329)
4. .NET反射、委托技术与设计模式(12515)
5. .Net调用Java的WebService之亲身体验(11938)
评论排行榜
1. DotNet WebService和WindowsService团队开通(130)
2. 如何掌握并在实践中自如运用设计模式(58)
3. C#写的一个代码生成器(36)
4. 用.Net开发Windows服务初探(27)
5. .NET反射、委托技术与设计模式(22)
就他吧-9ta8伴您开心每一天