抽象类把部分业务逻辑用具体方法具体实现,或者构造方法里面实现,而把其他需要子类来完成的方法设置为抽象方法,迫使子类务必实现。每种子类都可以以不同的方式进行具体实现,这就是模板方法模式。
先来看下 UML 的类图,比较简单
这里的抽象类就是抽象模板类,定义一个或者多个抽象方法,迫使子类来完成。同时定义一个模板方法,该方法一般情况下是一个具体方法,给出模板方法的执行过程,里面调用抽象方法。
具体的实现子类是把抽象类里面务必要实现的方法进行具体实现,成为父级模板方法里面的组成部分。
看下具体代码:
首先是抽象模板类
public abstract class AbstractTemplate {
//模板方法
public void templete(){
first();
second();
third();
}
//下面三个抽象方法需要子类来具体实现
public abstract void first();
public abstract void second();
public abstract void third();
}
接下来看具体实现,这个具体类是把大象装进冰箱的步骤
public class ConcreteTemplete extends AbstractTemplate{
@Override
public void first() {
System.out.println("第一步开启冰箱");
}
@Override
public void second() {
System.out.println("第二步把大象塞进去");
}
@Override
public void third() {
System.out.println("第三步关闭冰箱");
}
}
测试下
public class Client {
public static void main(String[] args) {
AbstractTemplate template=new ConcreteTemplete();
template.templete();
}
}
几点经验:
1、模板方法模式把复用代码集中到父类,子类可以直接调用;
2、抽象的父类可以级联,进行有效的复用部分代码;
3、一般和生命周期(生命周期一般会有几个阶段)有关的东西可以考虑该模式