模板方法模式(Template Method Pattern):定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法是一种类行为型模式.
模板方法模式是一种类的行为型模式,在它的结构图中只有类之间的继承关系,没有对象关联关系。
在模板方法模式的使用过程中,要求开发抽象类和开发具体子类的设计师之间进行协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算法的各个逻辑步骤。实现这些具体逻辑步骤的方法称为基本方法(Primitive Method),而将这些基本法方法汇总起来的方法称为模板方法(Template Method),模板方法模式的名字从此而来。
模板方法:一个模板方法是定义在抽象类中的、把基本操作方法组合在一起形成一个总算法或一个总行为的方法。
基本方法:基本方法是实现算法各个步骤的方法,是模板方法的组成部分。
抽象方法(Abstract Method)
具体方法(Concrete Method)
钩子方法(Hook Method):“挂钩”方法和空方法
钩子方法(Hook Method):
public void template()
{
open();
display();
if(isPrint())
{
print();
}
}
public boolean isPrint()
{
return true;
}
典型的抽象类代码如下所示:
public abstract class AbstractClass
{
public void templateMethod() //模板方法
{
primitiveOperation1();
primitiveOperation2();
primitiveOperation3();
}
public void primitiveOperation1() //基本方法—具体方法
{
//实现代码
}
public abstract void primitiveOperation2(); //基本方法—抽象方法
public void primitiveOperation3() //基本方法—钩子方法
{
}
}
典型的具体子类代码如下所示:
public class ConcreteClass extends AbstractClass
{
public void primitiveOperation2()
{
//实现代码
}
public void primitiveOperation3()
{
//实现代码
}
}
在模板方法模式中,由于面向对象的多态性,子类对象在运行时将覆盖父类对象,子类中定义的方法也将覆盖父类中定义的方法,因此程序在运行时,具体子类的基本方法将覆盖父类中定义的基本方法,子类的钩子方法也将覆盖父类的钩子方法,从而可以通过在子类中实现的钩子方法对父类方法的执行进行约束,实现子类对父类行为的反向控制。
原文地址:http://blog.csdn.net/u014600432/article/details/40400429