模板模式是类的行为模式,准备一个抽象类,将部分逻辑以具体的构造函数实现,然后声明一些抽象方法来迫使子类来实现剩余的逻辑,不同的子类可以用不同的方式来实现这些剩余方法,从而对剩余逻辑有不同的实现。
即可以在抽象类中规定逻辑的骨干方法,而不同的类中可以有不同的方式实现这些骨干方法。这就是模板模式的用意。
下面以一个简单的例子来介绍模板模式:
假设汽车,我们用启动和关闭来描述所有的汽车,我们可以定义下面的模板类:
public abstract class Car {
public abstract void start();
public abstract void stop();
public void action(){
this.start();
this.stop();
}
}
而宝马车有自己的启动方式和关闭方式,宝马车可以有自己的实现,我们可以这么定义:
public class Bwm extends Car{
public void start(){
System.out.println("this is bwm start method!");
}
public void stop(){
System.out.println("this is bwm stop method!");
}
}
而奔驰的启动和关闭方式又不太一样,我们可以定义奔驰的实现,我们可以这么定义:
public class Benz extends Car{
public void start(){
System.out.println("this is benz start method!");
}
public void stop(){
System.out.println("this is benz stop method!");
}
}
我们来测试下我们的模板方式是否可以正常使用:
public class TestTemplate {
public static void main(String[] args){
Car bwmCar = new Bwm();
bwmCar.action();
System.out.println("================================");
Car benzCar = new Benz();
benzCar.action();
}
}
打印的输出结果:
this is bwm start method!
this is bwm stop method!
================================
this is benz start method!
this is benz stop method!
很显然,这里的模板类Car取到了规定框架的作用,宝马和奔驰可以在这个框架下做各自的实现。这大概是模板方式的好处了吧。