[译]Java 设计模式 之模板方法

(文章翻译自Java Design Pattern: Template Method

模板方法设计模式定义了归档特定操作的工作流。它允许子类去修改特定的步奏而不用改变工作流的结构。

下面的例子表示模板方法模式是怎么工作的。

类图

template-method-pattern-class-diagram

Java 代码

Vehicle:java定义了一个小型车并且使其可以运作。

package com.programcreek.designpatterns.templatemethod;
 
abstract public class Vehicle {
	//set to protected so that subclass can access
	protected boolean status;
 
	abstract void start();
	abstract void run();
	abstract void stop();
 
	public void testYourVehicle(){
		start();
		if(this.status){
			run();
			stop();
		}	
	}
}

Car:Vehicle的子类,并且定义了具体的方法。

package com.programcreek.designpatterns.templatemethod;
 
public class Car extends Vehicle {
 
	@Override
	void start() {
		this.status = true;
	}
 
	@Override
	void run() {
		System.out.println("Run fast!");
 
	}
 
	@Override
	void stop() {
		System.out.println("Car stop!");
	}
}

Truck:Vehicle 的子类并且定义了具体的实现方法。

package com.programcreek.designpatterns.templatemethod;
 
public class Truck extends Vehicle {
 
	@Override
	void start() {
		this.status = true;
	}
 
	@Override
	void run() {
		System.out.println("Run slowly!");
	}
 
	@Override
	void stop() {
		System.out.println("Truck stop!");
 
	}
}

testVehicle 方法只接受一个Vehicle,它不在乎是一个car还是一个truck,因为他们是以相同的方式运作的。下面就是针对这个接口的例子。

import com.programcreek.designpatterns.templatemethod.Car;
import com.programcreek.designpatterns.templatemethod.Truck;
import com.programcreek.designpatterns.templatemethod.Vehicle;
 
public class Main {
	public static void main(String args[]){
		Car car = new Car();
		testVehicle(car);
 
		Truck truck = new Truck();
		testVehicle(truck);
	}
 
	public static void testVehicle(Vehicle v){
		v.testYourVehicle();
	}
}

模板设计模式的实际应用

这个模式用用Spring框架的数据访问对象中(DAO).org.springframework.jdbc.core.JdbcTemplate类有所有和JDBC工作流相同的重复代码块,比如update、query、execute等等。

原文地址:https://www.cnblogs.com/zhangminghui/p/4214742.html