java设计模式之模板模式(结合示例)


在这里插入图片描述

📋模板模式概念

在Java中,模板模式(Template Pattern)是一种行为设计模式,它定义了一个操作中的算法框架,并将某些步骤延迟到子类中实现。模板模式通过使用继承来提供算法的通用结构,同时允许子类在不改变算法结构的情况下重新定义其中的某些步骤。

📖组成要素

  • 模板模式由以下几个关键要素组成:
    1. 抽象模板(Abstract Template):定义了算法的基本结构和骨架,其中包含了一个或多个抽象方法或可选的钩子方法。
    2. 具体模板(Concrete Template):继承自抽象模板,并实现其中定义的抽象方法和钩子方法,完成算法中的具体步骤。
    3. 钩子方法(Hook Method):在抽象模板中可以定义的可选方法,子类可以选择性地覆盖或实现这些方法。

🔖代码示例

下面是一个示例,展示了如何使用模板模式来制作咖啡和茶:

/**
 * @Author: hrd
 * @CreateTime: 2023/7/26 11:13
 * @Description:
 */
public class TemplateDemo {
    public static void main(String[] args) {
        Beverage coffee = new Coffee();
        coffee.prepareBeverage();

        System.out.println("------------------");

        Beverage tea = new Tea();
        tea.prepareBeverage();
    }
}
// 抽象模板
abstract class Beverage {
    // 模板方法,定义了算法的基本结构和流程
    final void prepareBeverage() {
        boilWater();
        brew();
        pourInCup();
        if (customerWantsCondiments()) {
            addCondiments();
        }
    }

    // 具体步骤,由子类实现
    abstract void brew();

    // 具体步骤,由子类实现
    abstract void addCondiments();

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

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

    // 钩子方法,由子类选择性地覆盖
    boolean customerWantsCondiments() {
        return true;
    }
}

// 具体模板 - 咖啡
class Coffee extends Beverage {
    void brew() {
        System.out.println("Brewing coffee");
    }

    void addCondiments() {
        System.out.println("Adding sugar and milk");
    }
}

// 具体模板 - 茶
class Tea extends Beverage {
    void brew() {
        System.out.println("Steeping tea");
    }

    void addCondiments() {
        System.out.println("Adding lemon");
    }

    // 覆盖钩子方法
    boolean customerWantsCondiments() {
        return false;
    }
}


在上述示例中,抽象模板Beverage定义了制作饮料的基本结构和流程,并将一些具体步骤(如brew()addCondiments())延迟到具体子类中实现。具体子类CoffeeTea分别继承自抽象模板,并实现了自己特定的步骤。customerWantsCondiments()是一个钩子方法,在茶的具体子类中选择性地覆盖。

通过模板模式,我们可以在不改变算法结构的情况下,灵活地定义和扩展特定类型的饮料制作过程。

📈总结

  • 在Java中,模板模式适用于以下场景:
    1. 定义算法的骨架:当一个算法具有固定的执行步骤和顺序,但其中某些步骤需要根据具体情况进行实现时,可以使用模板模式。这样可以将算法的通用结构定义在抽象模板中,而将可变的部分延迟到具体子类中实现。
    2. 共享公共行为:当多个类或对象之间具有相似的行为和操作,但又有一些差异时,可以使用模板模式来共享公共的行为。通过将公共行为提取到抽象模板中,避免了代码重复,并提供了一种灵活的方式来处理不同的差异。
    3. 控制子类扩展:模板模式可以用于限制子类的扩展。通过在抽象模板中声明关键方法为 final 或使用钩子方法来控制子类的行为,确保算法的整体结构不会被破坏。
    4. 框架和库设计:模板模式在设计框架和库时非常有用。它提供了一种基础架构,让用户能够根据自己的需求来扩展和实现特定的功能。
  • 需要注意的是,模板模式适用于那些具有固定结构和流程,并且存在可变部分的场景。它可以提供一种通用的算法框架,同时仍然允许子类灵活地定义和实现自己的行为。
  • 总结起来,模板模式在Java中适用于需要定义算法骨架、共享公共行为、控制子类扩展以及框架和库设计等场景。
  • 模板模式在Java中广泛应用于各种框架和库中,例如Servlet生命周期、JUnit测试框架等。它提供了一种可重用和可扩展的方式来定义算法的通用结构。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中的模板设计模式是一种行为型设计模式,它允许我们定义一个算法的骨架,但允许子类为其中的一些步骤提供具体的实现。 模板设计模式由两个主要组件组成: 1. 抽象类(Abstract Class):它定义了一个模板方法,该方法提供了算法的骨架。它可以包含一个或多个抽象方法,这些方法由子类来实现。 2. 具体类(Concrete Class):它是抽象类的子类,负责实现抽象方法。 以下是一个示例代码来说明模板设计模式的用法: ```java public abstract class AbstractClass { // 模板方法 public final void templateMethod() { // 步骤一 stepOne(); // 步骤二 stepTwo(); // 步骤三 stepThree(); } // 抽象方法,由子类实现 protected abstract void stepOne(); protected abstract void stepTwo(); // 钩子方法,子类可以选择性地覆盖 protected void stepThree() { // 默认实现 } } public class ConcreteClass extends AbstractClass { @Override protected void stepOne() { // 具体实现步骤一 } @Override protected void stepTwo() { // 具体实现步骤二 } } ``` 在上面的示例中,`AbstractClass` 是抽象类,它定义了一个名为 `templateMethod()` 的模板方法,并声明了三个抽象方法 `stepOne()`、`stepTwo()` 和 `stepThree()`。`ConcreteClass` 是具体类,它继承了 `AbstractClass` 并实现了抽象方法。 通过使用模板设计模式,我们可以在抽象类中定义算法的骨架,而具体的实现可以由子类来完成。这种设计模式使得代码重用和扩展变得更加容易。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值