Template Method (模板方法)模式
GOF : 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 Template Method 使得子类可以不改变一个算法的结构即可以重定义该算法的某些特定步骤。
继承是 OO 思想的三大特性(封装、继承、 多态)之一。继承是为了更好的代码重用,但是在今天,越来越多的 OO 方法 学大师都不止在一处的总结出:要优先运用组合而不是继承。 Template Method 模 式是目前学到的最简单的模式之一。这也是比较常用到的模式。在 Template Method 模 式中就充分运用了继承。其实在我看来, Template Method 模式就是继承。在一个画图的程序中,我写了 一个叫 drow 的方法,它将画出我需要的图形。 Template Method 模式可以帮我做到这一点,因为对方法的调用通过一个引用来进行的,而这个引用指向的对象属于某一个派 生类。
下面是 Template Method 模式 UML 图:
下面是实现的 Java 代码:
定义一个抽象类,用来定义某算法的骨架,在这里是 abstract drow 。
package TemplateMethod;
public abstract class ShapeTemplate
{
public abstract void drow();//Template Method
}//end abctract class shape
package TemplateMethod;
派生出一个具体类,在具体类中实现了方法 drow 。
public class Square extends ShapeTemplate
{
@Override
public void drow()
{
System.out.println(" 画出正方形 ");
}//end drow()
}//end class Square
package TemplateMethod;
测试代码:
public class TemplateMethodPattern
{
private ShapeTemplate square;
public TemplateMethodPattern()
{
square = new Square();
}//end TemplateMethodPattern()
public void showTemplateMethodPattern()
{
square.drow();
}//end showTemplateMethodPattern()
public static void main(String[] args)
{
System.out.println("The Template Method Pattern!");
TemplateMethodPattern tmp = new TemplateMethodPattern();
tmp.showTemplateMethodPattern();
}//end main(...)
}//end class TemplateMethodPattern
运行结果:
The Template Method Pattern!
画出正方形
Template Method 模式让我们可以先定义这些步骤地顺序,然后重载那些需要改变的步骤。