Net设计模式实例之模板方法模式(Template Mothed Pattern)(2)
四.实例分析(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.Fill(dataSet, "Categories");
}
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.Fill(dataSet, "Products");
}
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 Main(string[] args)
{
DataAccessObject daoCategories = new Categories();
daoCategories.Run();
DataAccessObject daoProducts = new Products();
daoProducts.Run();
Console.ReadKey();
}
|
3、实例运行结果
五、总结(Summary)
本文对模板方法模式设计思想、结构和结构代码进行了分析,并以一实例数据操作进一步阐述了模板方法模式的设计及其C#实现。
本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/270976,如需转载请自行联系原作者