一、定义
定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。简而言之,就是父类定义的抽象方法交由子类实,并定义了模板方法,给出了逻辑的骨架,而逻辑的组成就是父类的抽象方法,它们推迟到子类去实现。
二、 角色
1、 抽象类(AbstractClass):定义了抽象方法和模板方法,定义了算法的骨架。
2、 具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。
三、demo
1、抽象类(AbstractClass):以游戏为例,Game为抽象类,定义了start()、play()和end()三个抽象方法和模板方法game(),模板方法定义了抽象方法的执行逻辑,即定义了逻辑骨架,抽象方法推迟到子类实现;
package com.example.template;
public abstract class Game {
protected abstract void start();
protected abstract void play();
protected abstract void end();
/**
* 模板方法
*/
public void game(){
start();
play();
end();
}
}
2、 具体类(ConcreteClass),继承抽象类,并实现抽象方法
package com.example.template;
public class Lol extends Game{
@Override
protected void start() {
System.out.println("开始游戏");
}
@Override
protected void play() {
System.out.println("打游戏");
}
@Override
protected void end() {
System.out.println("结束游戏");
}
}
3、客户类
package com.example.template;
public class Client {
public static void main(String[] args) {
Game lol = new Lol();
lol.game();
}
}
打印结果
开始游戏
打游戏
结束游戏