1、定义
模板方法模式,定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
2、模板方法模式及基本代码
基本代码
class Program
{
static void Main(string[] args)
{
AbstractClass c;
c = new ConcreteClassA();
c.TemplateMethode();
c = new ConcreteClassB();
c.TemplateMethode();
Console.Read();
}
}
//AbstractClass是抽象类,也是抽象模板并定义了一个模板方法。模板方法一般是一个具体方,
//它给出了一个顶级逻辑的骨架,逻辑组成步骤在相应的抽象操作中,推迟到子类实现。
abstract class AbstractClass
{
public void TemplateMethode()
{
PrimitiveOperation1();
PrimitiveOperation2();一开始并不知道它的具体是干什么的,直到真正做的时候才知道,所以此部分是不确定部分。
Console.WriteLine("");
}
publicabstract void PrimitiveOperation1();
publicabstract void PrimitiveOperation2();把不确定的部分暴露出去,延时到子类中去实现。
}
//实现父类暴露出来的可变问题。
class ConcreteClassA : AbstractClass
{
//具体实现
public override voidPrimitiveOperation1()
{
Console.WriteLine("具体类A方法1实现");
}
public override voidPrimitiveOperation2()
{
Console.WriteLine("具体类A方法2实现");
}
}
//实现父类暴露出来的可变问题。
class ConcreteClassB:AbstractClass
{
public override voidPrimitiveOperation1()
{
Console .WriteLine("具体类B方法1实现");
}
public override voidPrimitiveOperation2()
{
Console .WriteLine("具体类B方法2实现");
}
}
3、模板方法模式特点
1)模板方法模式是通过把不变行为搬到超类,去除子类中的重复代码。
2)模板方法就是提供了一个很好的复用平台。
3)当不变和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到单一的地方,这样就帮助了子类摆脱重复的不变行为的纠缠。
4、小结
我们可以这样理解模板模式:在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,那么这时就将不确定的部分暴露出去,由该类的子类去完成。
5、简单受益小例子
类图:
代码:
推荐链接:毕向东----《模板方法模式》
http://pan.baidu.com/share/link?shareid=4114751104&uk=2318465776&fid=1094502700