模板方法模式的结构
模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术。
模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架,另一些设计师则负责给出这个算
法的各个逻辑步骤。代表这些具体逻辑步骤的方法称做基本方法(primitive method);而将这些基本方法汇总起来的方法叫做模板方法
(template method),这个设计模式的名字就是从此而来。
模板方法模式的组成(两部分):
1:抽象模板:
定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤。
定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,
推迟到子类实现。顶级逻辑也有可能调用一些具体方法实现父类所定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。。
public abstract class AbstractTemplate {
/**
* 模板方法
*/
public void templateMethod(){
//调用基本方法
abstractMethod();
hookMethod();
concreteMethod();
}
/**
* 基本方法的声明(由子类实现)
*/
protected abstract void abstractMethod();
/**
* 基本方法(空方法)
*/
protected void hookMethod(){}
/**
* 基本方法(已经实现)
*/
private final void concreteMethod(){
//业务相关的代码
}
}
2:具体模板
实现父类所定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。
每一个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法(也就是顶级逻辑的组
成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。
public class ConcreteTemplate extends AbstractTemplate{
//基本方法的实现
@Override
public void abstractMethod() {
//业务相关的代码
}
//重写父类的方法
@Override
public void hookMethod() {
//业务相关的代码
}
}
也就是说父类是个模板,子类继承了父类,重写父类的模板方法后,对父类方法加以实现,子类可以做各种不同的实现,父类就
像是领导,下达命令,要在长江上面建桥就是一个抽象模板,然后,就有下属,做这个事情, 找工程师画图,买材料等,就是一个
具体模板,但是你不能修一个隧道出来,这也是说具体模板不能改变抽象模板的顶级逻辑,只能改变可变的部分。每当定义一个
子类模板时,不要一控制流程的思路去想,而要以责任的思路去想。
哈哈,当然,这是我自己的理解,如果你还是觉得云里雾里的,就看看原文章吧我是看了这篇章,根据自己的理解下写出来的:
原文举了好多例子:http://www.cnblogs.com/java-my-life/archive/2012/05/14/2495235.html