模板方法模式主要用来定义算法的骨架,把具体的算法实现延迟到子类。
1、定义
定义一个操作中的算法骨架,将这些算法步骤的具体实现延迟到子类中,使得子类可以不改变算法结构即可重定义该算法的某些特定步骤。
2、使用场景
- 需要固定定义算法的骨架,实现一个算法的不变部分,并把可变的部分留给子类来实现。
- 各个子类有公共的行为可以抽取出来,集中在一个公共的类中去实现,从而避免代码重复。
3、UML图
4、示例代码
/**
* 模板类,定义算法骨架
*/
public abstract class AbsTemplate {
public abstract void stepOne();
public abstract void stepTwo();
public abstract void stepThree();
public void execute() {
stepOne();
stepTwo();
stepThree();
}
}
public class ConcreteImplA extends AbsTemplate {
@Override
public void stepOne() {
System.out.println("ConcreteImplA stepOne");
}
@Override
public void stepTwo() {
System.out.println("ConcreteImplA stepTwo");
}
@Override
public void stepThree() {
System.out.println("ConcreteImplA stepThree");
}
}
public class ConcreteImplB extends AbsTemplate {
@Override
public void stepOne() {
System.out.println("ConcreteImplB stepOne");
}
@Override
public void stepTwo() {
System.out.println("ConcreteImplB stepTwo");
}
@Override
public void stepThree() {
System.out.println("ConcreteImplB stepThree");
}
}
客户端调用:
public class Client {
public static void main(String[] args) {
AbsTemplate templateA = new ConcreteImplA();
AbsTemplate templateB = new ConcreteImplB();
templateA.execute();
System.out.print("\n");
templateB.execute();
}
}
调用结果:
模板方法的本质是固定算法的骨架。