原文 第13章 模版方法模式(Template Method)
模板模式
举例:模拟下数据库的update方法,先删除在插入。
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
abstract
class
SqlManage
{
public
string
connStr;
//虚方法 子类可以重写
public
virtual
void
SetConnStr()
{
connStr=
"Server=Rj-097;User Id=sa;Password=sa;Database=Northwind"
;
}
public
abstract
void
Delete();
public
abstract
void
Insert();
public
void
Update()
{
SetConnStr();
Delete();
Insert();
}
}
/// <summary>
/// SqlServer的修改方法具体实现
/// </summary>
class
SqlServer : SqlManage
{
public
override
void
Delete()
{
//SqlServer的删除数据的方法
}
public
override
void
Insert()
{
//SqlServer的插入数据的方法
}
}
/// <summary>
/// MySql的修改方法具体实现
/// </summary>
class
MySql : SqlManage
{
public
override
void
Delete()
{
//MySql的删除数据的方法
}
public
override
void
Insert()
{
//MySql的插入数据的方法
}
}
|
调用mysql的更新方法:
1
2
3
4
5
6
7
8
9
|
class
Program
{
static
void
Main(
string
[] args)
{
//mysql的更新方法
SqlManage mySql =
new
MySql();
mySql.Update();
}
}
|
模板模式,用的非常的广泛。核心的就在于能自动执行子类实现的方法。
要点:
1.Template Method模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性)为很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。
2.除了可以灵活应对子步骤的变化外,“不用调用我,让我来调用你”的反向控制结构是Template Method的典型应用。
3.在具体实现方面,被Template Method调用的虚方法可以具有实现,也可以没有任何实现(抽象方法,纯虚方法),但一般推荐将它们设置为protected方法。[李建忠]