天书的博客
C++博客
首页
新文章
新随笔
聚合
管理
posts - 124, comments - 29, trackbacks - 0
抽象工厂模式及范例
Abstract Factory 模式:关键特征
意图:为特定(不同)的客户提供特定(不同)系列的对象
。
比如Vista风格的桌面,Window标准的桌面(其中包括图标的样式,菜单栏,任务栏等)
问题:一系列相关或相互依赖的对象需要被实例化
解决方案:
先定义一个抽象工厂类来选择工厂类(可以根据配置文件选取)
1
class
AbstractFactory
2
{
3
private
string
FactoryType
=
null
;
4
System.Configuration.AppSettingsReader asr
=
new
System.Configuration.AppSettingsReader();
5
public
IFactory GetFactory()
6
{
7
FactoryType
=
(
string
)asr.GetValue(
"
FactoryName
"
,
typeof
(
string
));
8
switch
(FactoryType)
9
{
10
case
"
ChineseFactory
"
:
11
return
new
ChineseFactory();
12
break
;
13
case
"
AmericanFactory
"
:
14
return
new
AmericanFactory();
15
break
;
16
default
:
17
return
new
ChineseFactory();
18
}
19
20
}
21
}
各个工厂类里创建不同系列的对象(同一工厂类里的对象风格相同),但他们有一个共同的接口或父类
1
interface
IFactory
2
{
3
Service CreateService();
4
}
5
6
class
ChineseFactory : IFactory
7
{
8
9
IFactory 成员
#region
IFactory 成员
10
11
Service IFactory.CreateService()
12
{
13
return
new
ChineseService();
14
}
15
16
#endregion
17
}
18
class
AmericanFactory : IFactory
19
{
20
IFactory 成员
#region
IFactory 成员
21
22
Service IFactory.CreateService()
23
{
24
return
new
AmericanService();
25
}
26
27
#endregion
28
}
最后在客户端Service se = (new AbstractFactory()).GetFactory().CreateService();
,提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合。每次在中国和美国的工资体制上切换时可以通过更改配置文件来切换。这样就避免了源代码保密的情况下无法更改业务规则的弊端。
配置文件如下
<?
xml version
=
"
1.0
"
encoding
=
"
utf-8
"
?>
<
configuration
>
<
appSettings
>
<
add key
=
"
FactoryName
"
value
=
"
ChineseFactory
"
/>
</
appSettings
>
</
configuration
>
posted on 2008-06-24 11:00
天书
阅读(832)
评论(0)
编辑
收藏
引用
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
<
2008年6月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
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
1
2
3
4
5
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(5)
给我留言
查看公开留言
查看私人留言
随笔档案
2013年11月 (2)
2013年10月 (2)
2013年4月 (1)
2010年12月 (1)
2010年11月 (1)
2010年10月 (2)
2010年8月 (1)
2010年6月 (2)
2010年5月 (3)
2010年4月 (4)
2010年3月 (1)
2010年2月 (4)
2010年1月 (4)
2009年11月 (1)
2009年9月 (2)
2009年7月 (1)
2009年6月 (1)
2009年4月 (1)
2009年2月 (9)
2008年12月 (2)
2008年11月 (6)
2008年10月 (15)
2008年9月 (29)
2008年6月 (17)
2008年5月 (3)
2008年4月 (6)
2008年3月 (3)
文章分类
Direct3D(1)
文章档案
2013年4月 (1)
2008年6月 (1)
2008年3月 (1)
好友的Bolg
韩全磊的技术Blog
搜索
最新评论
1. re: 插件化开发——接口和反射[未登录]
评论内容较长,点击标题查看
--x
2. re: 触发器作用 一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行
thank you
--enen
3. re: C#属性解析——综合“公有字段的简单而直接的表达式"和get和set函数提供的控制权"而产生的
很详细
--www
4. re: C# winform DevExpress GridControl GridView大批量数据(20万条)导出Excel[未登录]
导出的数据打不开啊,不是EXCEL啊
--李
5. re: C# textbox 属性 TabStop 控制输入焦点
sdfs
--78
阅读排行榜
1. DateTimePicker 控件的格式设置 CustomFormat yyyy-MM-dd HH:mm:ss 月大写M,分钟小写m,小时H代表24小时计算,h代表12小时计算(20769)
2. DevExpress.XtraCharts 使用心得(9912)
3. c# 中treeview 树节点图标的动态加载,及选中时图标改变(7806)
4. C# winform DevExpress GridControl GridView大批量数据(20万条)导出Excel(7446)
5. DevExpress TreeList 调优_绑定数据源方式, 放弃原来的AppendNode加载数据的方式(6733)
评论排行榜
1. D3D中镜面反射效果实现(3)
2. C# 多行textbox 按回车键提取光标所在行字符串且在最上面一行显示,光标回归第一行(3)
3. c# 圆形按钮制作——Region属性(3)
4. C# textbox 属性 TabStop 控制输入焦点(2)
5. C# 抽象方法Abstract 和 虚方法Virtual(1)