模板方法模式用于定义且约束一系列操作的工作流程,由父类定义操作模板,子类实现具体的操作步骤。
此模式适用于总体业务流程相对固定不变而流程中各环节的具体实现不尽相同的场景,在保证流程的一致性,还能定制具体的实现。
此模式将流程中不变的部分提取出来,将变化的部分推迟到子类中实现(或者不知道应该如何实现,必需由特定子类完成),父类中定义流程的方法一般为final的,以避免被子类覆盖,流程中的具体环节由子类实现,可以声明为抽象的以迫使子类实现。
场景:测试车辆的运行情况,要求:必须先启动车辆,然后在车辆处于运行状态时,可以进行测试,运行之后停止运行,若不处于运行状态时不能进行运行和停止测试,测试车辆包括轿车、卡车等车辆,测试流程都一致。
设计图:
示例代码:
abstract class Vehicle {
protected boolean status;
public final void runTest() {
start();
if (status) {
run();
stop();
}
}
public abstract void start();
public abstract void run();
public abstract void stop();
}
class Car extends Vehicle {
@Override
public void start() {
status = true;
System.out.println("Car 启动");
}
@Override
public void run() {
System.out.println("Car 运行");
}
@Override
public void stop() {
System.out.println("Car 停止");
}
}
class Truck extends Vehicle {
@Override
public void start() {
status = true;
System.out.println("Truck 启动");
}
@Override
public void run() {
System.out.println("Truck 运行");
}
@Override
public void stop() {
System.out.println("Truck 停止");
}
}
public class Tester {
public static void main(String[] args) {
// Vehicle vehicle = new Car();
Vehicle vehicle = new Truck();
testVehicle(vehicle);
}
public static void testVehicle(Vehicle vehicle) {
vehicle.runTest();
}
}