模板模式

27 阅读2分钟

模板模式是一种设计模式,用于定义算法骨架,而将一些步骤的具体实现延迟到子类中完成。

举个例子来说,比如制作咖啡和茶的过程就可以使用模板模式来实现。首先我们定义一个抽象类Beverage作为基类,其中包含两个方法:prepareRecipe()和brew()。prepareRecipe()方法负责制作饮品过程中的步骤,brew()方法则是具体的实现。我们在Beverage基类中定义下列几个步骤:

public abstract class Beverage {
    final void prepareRecipe() {
        boilWater();
        brew();
        pourInCup();
        addCondiments();
    }

    abstract void brew();
    abstract void addCondiments();

    void boilWater() {
        System.out.println("Boiling water");
    }

    void pourInCup() {
        System.out.println("Pouring into cup");
    }
}

public class Coffee extends Beverage {
    void brew() {
        System.out.println("Dripping coffee through filter");
    }

    void addCondiments() {
        System.out.println("Adding sugar and milk");
    }
}
public class Tea extends Beverage {
    void brew() {
        System.out.println("Steeping the tea");
    }

    void addCondiments() {
        System.out.println("Adding lemon");
    }
}
public class Client {
    public static void main(String[] args) {
        Beverage tea = new Tea();
        tea.prepareRecipe();

        Beverage coffee = new Coffee();
        coffee.prepareRecipe();
    }
}

在JDK中,模板模式的应用非常广泛,以下是一些典型的例子:

1.Collections.sort()方法: 在Java中,我们可以使用Collections.sort()方法对一个集合进行排序。该方法内部实际上调用了List.sort()方法,而List.sort()方法则使用了模板方法的设计模式,它将排序的算法骨架封装在父类中,而具体的排序逻辑则交由子类去实现。

2.HttpServlet.service()方法: 在Java Web开发中,所有的请求都会被Servlet容器转发给HttpServlet类的service()方法处理。该方法就是一个典型的模板方法,其中包含了客户端请求的处理流程,但具体的请求处理逻辑则交由子类去实现。

3.JDBC中的模板方法: 在Java的JDBC API中,PreparedStatement和Statement都实现了execute()方法,该方法是一个典型的模板方法,其中包含了执行SQL语句的流程,但具体的SQL语句则由子类去传入并执行。

4.Spring Framework 中的 JdbcTemplate 类:该类封装了 JDBC 操作,其中的 query() 和 update() 方法使用了模板模式,其中 SQL 语句的执行和结果处理由具体子类实现。