您现在的位置:
软界网
>
技术中心
>
软件工程
>
项目管理工具
> 技术显示
操作系统
|
办公软件
|
实用工具
|
网络管理
|
软件开发
|
WEB开发
|
软件工程
|
数据库
|
设计在线
|
信息安全
|
行业信息化
|
管理信息化
|
移动开发
设计模式 - Builder Pattern(建造者模式)
2008-2-26 23:59:50 网友评论 阅读次数
点此评论
介绍
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
示例
用同样的构建过程创建Sql和Xml的Insert()方法和Get()方法。
MessageModel
using
System;
using
System.Collections.Generic;
using
System.Text;
软件开发网 www.mscto.com
namespace
Pattern.Builder
{
/**/
///
<summary>
///
Message实体类
///
</summary>
public
class
MessageModel
{
/**/
///
<summary>
///
构造函数
///
</summary>
///
<paramname="msg">
Message内容
</param>
///
<paramname="pt">
Message发布时间
</param>
public
MessageModel(
string
msg,DateTimept)
{
软件开发网 www.mscto.cn
this
._message
=
msg;
this
._publishTime
=
pt;
}
private
string
_message;
/**/
///
<summary>
///
Message内容
///
</summary>
public
string
Message
{
软件开发网 www.mscto.cn
get
{
return
_message;}
set
{_message
=
value;}
}
private
DateTime_publishTime;
/**/
///
<summary>
///
Message发布时间
///
</summary>
public
DateTimePublishTime
{
get
{
return
_publishTime;}
set
{_publishTime
=
value;}
}
}
}
SqlMessage
using
System;
using
System.Collections.Generic;
using
System.Text;
namespace
Pattern.Builder
{
软件开发网 www.mscto.com
/**/
///
<summary>
///
Sql方式操作Message
///
</summary>
public
class
SqlMessage
{
软件开发网 www.mscto.cn
/**/
///
<summary>
///
获取Message
///
</summary>
///
<returns></returns>
public
List
<
MessageModel
>
Get()
{
List
<
MessageModel
>
l
=
new
List
<
MessageModel
>
();
l.Add(
new
MessageModel(
"
SQL方式获取Message
"
,DateTime.Now));
return
l;
}
/**/
///
<summary>
///
插入Message
///
</summary>
///
<paramname="mm">
Message实体对象
</param>
///
<returns></returns>
public
bool
Insert(MessageModelmm)
{
软件开发网 www.mscto.cn
//
代码略
return
true
;
}
}
}
XmlMessage
using
System;
using
System.Collections.Generic;
using
System.Text;
namespace
Pattern.Builder
{
/**/
///
<summary>
软件开发网 www.mscto.com
///
Xml方式操作Message
///
</summary>
public
class
XmlMessage
{
软件开发网 www.mscto.cn
/**/
///
<summary>
///
获取Message
///
</summary>
///
<returns></returns>
public
List
<
MessageModel
>
Get()
{
List
<
MessageModel
>
l
=
new
List
<
MessageModel
>
();
l.Add(
new
MessageModel(
"
XML方式获取Message
"
,DateTime.Now));
return
l;
}
软件开发网 www.mscto.com
/**/
///
<summary>
///
插入Message
///
</summary>
///
<paramname="mm">
Message实体对象
</param>
软件开发网 www.mscto.cn
///
<returns></returns>
public
bool
Insert(MessageModelmm)
{
//
代码略
return
true
;
}
}
}
软件开发网 www.mscto.com
Operation
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Reflection;
namespace
Pattern.Builder
{
软件开发网 www.mscto.cn
/**/
///
<summary>
///
操作(Product)
///
</summary>
public
class
Operation
{
private
string
_type;
private
Dictionary
<
string
,
string
>
_dictionary;
/**/
///
<summary>
///
构造函数
///
</summary>
///
<paramname="type">
产品类型
</param>
public
Operation(
string
type)
{
_dictionary
=
new
Dictionary
<
string
,
string
>
();
this
._type
=
type;
}
/**/
///
<summary>
软件开发网 www.mscto.com
///
索引器
///
</summary>
///
<paramname="key"></param>
///
<returns></returns>
public
string
this
[
string
key]
{
软件开发网 www.mscto.cn
get
{
return
_dictionary[key];}
set
{_dictionary[key]
=
value;}
}
/**/
///
<summary>
///
获得结果
///
</summary>
///
<returns></returns>
public
string
GetResult()
软件开发网 www.mscto.com
{
Assemblyassembly
=
Assembly.Load(
"
Pattern.Builder
"
);
MethodInfomethodGet
=
assembly.GetType(
"
Pattern.Builder.
"
+
_dictionary[
"
get
"
].Split(
'
|
'
)[
0
]).GetMethod(_dictionary[
"
get
"
].Split(
'
|
'
)[
1
]);
object
objGet
=
methodGet.Invoke(assembly.CreateInstance(
"
Pattern.Builder.
"
+
_dictionary[
"
get
"
].Split(
'
|
'
)[
0
]),
null
);
List
<
MessageModel
>
m
=
(List
<
MessageModel
>
)objGet;
MethodInfomethodInsert
=
assembly.GetType(
"
Pattern.Builder.
"
+
_dictionary[
"
insert
"
].Split(
'
|
'
)[
0
]).GetMethod(_dictionary[
"
insert
"
].Split(
'
|
'
)[
1
]);
object
objInsert
=
methodInsert.Invoke(assembly.CreateInstance(
"
Pattern.Builder.
"
+
_dictionary[
"
insert
"
].Split(
'
|
'
)[
0
]),
new
object
[]
{
new
MessageModel(_dictionary[
"
insert
"
].Split(
'
|
'
)[
2
],Convert.ToDateTime(_dictionary[
"
insert
"
].Split(
'
|
'
)[
3
]))}
);
bool
b
=
(
bool
)objInsert;
return
"
类型为
"
+
this
._type
+
"
的执行结果:<br/>
"
+
b.ToString()
+
"
<br/>
"
+
m[
0
].Message
+
"
"
+
m[
0
].PublishTime.ToString()
+
"
<br/>
"
;
}
}
}
AbstractMessageBuilder
using
System;
using
System.Collections.Generic;
using
System.Text;
namespace
Pattern.Builder
{
软件开发网 www.mscto.com
/**/
///
<summary>
///
抽象Message建造者(Builder)
///
</summary>
public
abstract
class
AbstractMessageBuilder
{
/**/
///
<summary>
///
构造函数
///
</summary>
///
<paramname="type">
产品类型
</param>
public
AbstractMessageBuilder(
string
type)
{
软件开发网 www.mscto.cn
this
._operation
=
new
Operation(type);
}
/**/
///
<summary>
///
操作(Product)
///
</summary>
protected
Operation_operation;
/**/
///
<summary>
///
操作(Product)
///
</summary>
public
OperationOperation
{
软件开发网 www.mscto.cn
get
{
return
_operation;}
set
{_operation
=
value;}
}
/**/
///
<summary>
///
建造插入方法
///
</summary>
///
<paramname="mm"></param>
abstract
public
void
BuilderInsert(MessageModelmm);
/**/
///
<summary>
///
建造获取方法
///
</summary>
abstract
public
void
BuilderGet();
}
}
SqlMessageBuilder
using
System;
using
System.Collections.Generic;
using
System.Text;
namespace
Pattern.Builder
{
/**/
///
<summary>
///
SqlMessage建造者(ConcreteBuilder)
///
</summary>
public
class
SqlMessageBuilder:AbstractMessageBuilder
{
/**/
///
<summary>
软件开发网 www.mscto.cn
///
构造函数
///
</summary>
public
SqlMessageBuilder()
:
base
(
"
sql
"
)
软件开发网 www.mscto.com
{
软件开发网 www.mscto.cn
}
/**/
///
<summary>
软件开发网 www.mscto.cn
///
建造Sql插入方法
///
</summary>
///
<paramname="mm">
Message实体对象
</param>
软件开发网 www.mscto.com
public
override
void
BuilderInsert(MessageModelmm)
{
base
._operation[
"
insert
"
]
=
"
SqlMessage|Insert|
"
+
mm.Message
+
"
|
"
+
mm.PublishTime.ToString()
+
""
;
}
/**/
///
<summary>
///
建造Sql获取方法
///
</summary>
public
override
void
BuilderGet()
{
base
._operation[
"
get
"
]
=
"
SqlMessage|Get
"
;
}
}
}
XmlMessageBuilder
using
System;
using
System.Collections.Generic;
using
System.Text;
namespace
Pattern.Builder
{
软件开发网 www.mscto.cn
/**/
///
<summary>
软件开发网 www.mscto.cn
///
XmlMessage建造者(ConcreteBuilder)
///
</summary>
public
class
XmlMessageBuilder:AbstractMessageBuilder