设计模式——模板方法模式

模板方法模式(Template Method Pattern)是一种行为型设计模式,它在抽象类中定义了一个算法的框架,并将一些步骤延迟到子类中实现。这种模式使得子类可以在不改变算法结构的情况下重写算法中的某些特定步骤。

原理

  • 抽象模板类(Abstract Template Class): 定义一个操作中的算法骨架,包含了一个或多个“模板方法”,这些方法由基本代码和若干个待实现的抽象方法组成。
  • 具体模板类(Concrete Template Classes): 实现抽象模板类中声明的抽象方法,从而完成算法中未指定部分的具体逻辑。

Java代码示例

// 抽象模板类 - 烹饪基础流程
public abstract class CookingRecipe {
    // 模板方法
    public final void cookMeal() {
        prepareIngredients();
        cook();
        serve();
    }

    // 具体方法由抽象类实现
    protected void prepareIngredients() {
        System.out.println("Preparing ingredients...");
    }

    // 抽象方法,留给子类实现
    protected abstract void cook();

    // 具体方法由抽象类实现
    protected void serve() {
        System.out.println("Serving the meal...");
    }
}

// 具体模板类 - 蒸饭食谱
public class SteamedRiceRecipe extends CookingRecipe {
    @Override
    protected void cook() {
        System.out.println("Steaming rice...");
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        CookingRecipe recipe = new SteamedRiceRecipe();
        recipe.cookMeal(); // 输出:Preparing ingredients... -> Steaming rice... -> Serving the meal...
    }
}

想象你正在教孩子做一道菜,这个过程中包含了切菜、炒菜和上菜三个步骤。作为家长,你会告诉孩子整个做菜的大致流程(模板方法),但是让孩子自己决定如何切菜和炒菜(抽象方法)。这样,每次做不同的菜时,只要按照你设定的基本流程走,但具体怎么切怎么炒可以根据不同菜品自由发挥。

应用场景

  • 框架与应用开发:许多Java框架如Spring MVC、Struts等都使用了模板方法模式,它们提供了一个处理请求的基本流程框架,开发者只需要覆盖其中的关键步骤来实现自己的业务逻辑。
  • 软件构建过程:构建工具Maven使用模板方法模式执行一系列构建任务,如清理、编译、测试、打包等,每个步骤都可以根据需要自定义扩展。
  • 游戏开发:游戏中角色的行为可以采用模板方法模式,比如战斗动作有一套通用的执行流程(准备、攻击、结束),但具体的攻击方式由各个角色类自己实现。

适用性

  • 当多个子类具有相同的算法结构,只是其中一部分实现细节有所不同时。
  • 控制子类必须遵循某种算法框架或者顺序时。
  • 一次性实现一种操作中的不变部分,并将可变的行为留给子类去实现。

你可能感兴趣的:(Java,系列文章,设计模式,模板方法模式,java)