四.实例分析(Example)
1、场景
定义一个数据操作
Select
的骨架,即
Connect
连接数据库,
Select
查询数据返回到数据集
DataSet
,对得到的结果
DataSet
进行处理
Process
查询符合自己的数据。
Connect
和
Run
是公用的可以放到抽象类
DataAccessObject
中,特定步骤
Select
和
Process
交由子类来处理。结构
如下图所示
DataAccessObject
类
:定义了一个算法框架,具体子类将重新定义
Select
和
Process
操作。
子类
Categories
和
Products
:分别实现父类的
Select
和
Process
操作
2、代码
1
、抽象模板类
DataAccessObject
及其模板方法
Run
|
abstract
class DataAccessObject
{
protected string
connectionString;
protected DataSet
dataSet;
public virtual void
Connect()
{
// Make sure mdb is available to app
connectionString =
"provider=Microsoft.JET.OLEDB.4.0;"
+"data source=..\\..\\..\\db1.mdb"
;
}
public abstract void
Select();
public abstract void
Process();
public virtual void
Disconnect()
{
connectionString = ""
;
}
// The 'Template Method'
public void
Run()
{
Connect();
Select();
Process();
Disconnect();
}
}
|
2
、子类
Categories
和Products
实现模板类中的方法
Select
、Process
|
class
Categories
: DataAccessObject
{
public override void
Select()
{
string
sql = "select CategoryName from Categories"
;
OleDbDataAdapter
dataAdapter = new OleDbDataAdapter
(sql, connectionString);
dataSet = new DataSet
();
dataAdapter.Fi
}
public override void
Process()
{
Console
.WriteLine("Categories ---- "
);
DataTable
dataTable = dataSet.Tables["Categories"
];
foreach
(DataRow
row in
dataTable.Rows)
{
Console
.WriteLine(row["CategoryName"
]);
}
Console
.WriteLine();
}
}
class
Products
: DataAccessObject
{
public override void
Select()
{
string
sql = "select ProductName from Products"
;
OleDbDataAdapter
dataAdapter = new OleDbDataAdapter
(sql, connectionString);
dataSet = new DataSet
();
dataAdapter.Fi
}
public override void
Process()
{
Console
.WriteLine("Products ---- "
);
DataTable
dataTable = dataSet.Tables["Products"
];
foreach
(DataRow
row in
dataTable.Rows)
{
Console
.WriteLine(row["ProductName"
]);
}
Console
.WriteLine();
}
}
|
3
、客户端代码
|
static
void
{
DataAccessObject
daoCategories = new Categories
();
daoCategories.Run();
DataAccessObject
daoProducts = new Products
();
daoProducts.Run();
Console
.ReadKey();
}
|
3、实例运行结果
五、总结(Summary)
本文对模板方法模式设计思想、结构和结构代码进行了分析,并以一实例数据操作进一步阐述了模板方法模式的设计及其
C#
实现。
本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/270976,如需转载请自行联系原作者