一、模板方法模式简介(Brief Introduction)
模板方法模式
(Template Method Pattern),
定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可以重定义算法的某些特定步骤。模板方法模式把不变行为搬移到超类,从而去除子类中的重复代码,实际上模板方法模式就是提供了一个代码复用平台。
二、解决的问题(What To Solve)
要完成在某一细节上层次一致的一个过程或一系列步骤,但个别步骤在更详细的层次上实现不同时,可以使用模版方法模式解决问题。
三、模板方法模式分析(Analysis)
1、模板方法模式结构
抽象类
AbstractClass
,实现了一个模版方法,定义了一个算法框架,具体子类将重新定义
PrimitiveOperation1
和
PrimitiveOperation1
以实现一个算法的步骤。
子类
ConcreteClassA
和
ConcreteClassB
,实现
PrimitiveOperation1
和
PrimitiveOperation1
以完成算法中与特定子类相关的步骤。
2、模板方法模式代码
1
、抽象模板类
AbstractClass
及其模板方法
TemplateMethod()
|
public
abstract class AbstractClass
{
public abstract void
PrimitiveOperation1();
public abstract void
PrimitiveOperation2();
public void
TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
Console
.WriteLine("
模板方法执行完
"
);
}
}
|
2
、子类
ConcreteClassA
、
ConcreteClassB
实现父类定义的抽象方法
|
public
class ConcreteClassA
:AbstractClass
{
public override void
PrimitiveOperation1()
{
Console
.WriteLine("
具体实现类
{0}
方法
1
实现
"
,this
.GetType().Name);
}
public override void
PrimitiveOperation2()
{
Console
.WriteLine("
具体实现类
{0}
方法
2
实现
"
, this
.GetType().Name);
}
}
public
class ConcreteClassB
:AbstractClass
{
public override void
PrimitiveOperation1()
{
Console
.WriteLine("
具体实现类
{0}
方法
1
实现
"
, this
.GetType().Name);
}
public override void
PrimitiveOperation2()
{
Console
.WriteLine("
具体实现类
{0}
方法
2
实现
"
, this
.GetType().Name);
}
}
|
3
、客户端代码
|
static
void
{
AbstractClass
abstractClass = new ConcreteClassA
();
abstractClass.TemplateMethod();
abstractClass = new ConcreteClassB
();
abstractClass.TemplateMethod();
Console
.ReadKey();
}
|
3、模板方法模式运行结果
本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/270970,如需转载请自行联系原作者