设计模式: 模板模式

目录

一,模板模式

二,特点

三,组成部分

四,实现步骤

五,案例


一,模板模式

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

二,特点

  1. 算法骨架:在超类中定义了算法的骨架,即算法的整体步骤。

  2. 钩子(Hooks):在模板方法中定义的一些方法,它们在超类中不做具体实现,而是在子类中根据需要重写。

  3. 抽象操作:在模板方法中定义的一些抽象方法,它们在子类中必须被实现。

  4. 具体操作:在模板方法中定义的一些具体方法,它们在超类中已经实现,也可以在子类中被覆盖。

  5. 扩展性:模板模式通过在子类中覆盖钩子和抽象操作,可以很容易地扩展新的功能。

三,组成部分

  • AbstractClass:定义了模板方法和一些抽象操作,以及一个或多个钩子方法。
  • ConcreteClass:继承自AbstractClass,实现模板方法中的抽象操作,也可以覆盖钩子方法。

四,实现步骤

  1. 定义一个抽象类AbstractClass,其中包含模板方法和其他一些操作。
  2. AbstractClass中实现模板方法,调用所有必要的操作。
  3. 定义一个或多个具体操作,这些操作在抽象类中是抽象的,需要在子类中实现。
  4. 定义钩子方法,它们在模板方法中被调用,但在抽象类中不做具体实现。
  5. 创建一个或多个继承自AbstractClass的子类,实现抽象操作,并根据需要覆盖钩子方法。

五,案例

abstract class CafeMaker {
    public final void makeCoffee(){//模板方法 定义了制作咖啡的步骤
        putWaterInMachine();
        putCoffeeBeansInMachine();
        cook();
        pourInCup();
    }
    protected void cook(){//钩子方法
        System.out.println("使用机器烹制");
    }
    protected abstract void putWaterInMachine();//定义抽象方法
    protected abstract void putCoffeeBeansInMachine();//定义抽象方法
    private void pourInCup() {//具体方法
        System.out.println("将咖啡倒入杯子里");
    }
}
class EspressoMaker extends CafeMaker{

    @Override
    protected void putWaterInMachine() {
        System.out.println("加入热水");
    }

    @Override
    protected void putCoffeeBeansInMachine() {
        System.out.println("加入咖啡豆");
    }
}
class Client {
    public static void main(String[] args) {
        CafeMaker maker = new EspressoMaker();
        maker.makeCoffee();
    }
}

在这个例子中,CafeMaker 是一个抽象类,它定义了制作咖啡的算法骨架(模板方法 makeCoffee()),同时定义了两个抽象方法 putWaterInMachine()putCoffeeBeansInMachine(),这些方法由具体子类实现。此外,它还包含一个钩子方法 烹制() 和一个具体方法 pourInCup()

EspressoMakerCafeMaker 的具体实现,它继承自 CafeMaker 并提供了 putWaterInMachine()putCoffeeBeansInMachine() 方法的实现。

客户端代码通过创建 EspressoMaker 的实例,并调用 makeCoffee() 方法来制作咖啡。

这个模板模式的例子展示了如何通过定义算法的骨架和推迟某些步骤到子类中实现,来达到代码复用和扩展性的目的。

相关推荐

  1. 设计模式-模板方法模式

    2024-05-05 00:52:02       43 阅读
  2. 设计模式模板方法模式

    2024-05-05 00:52:02       27 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-05 00:52:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-05 00:52:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-05 00:52:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-05 00:52:02       20 阅读

热门阅读

  1. 第二十六章 版本管理 - GIT

    2024-05-05 00:52:02       15 阅读
  2. 代码随想录算法训练营day56

    2024-05-05 00:52:02       8 阅读
  3. Linux上OcenBase单机版部署及基本信息查询

    2024-05-05 00:52:02       14 阅读
  4. Jar Summery 2 Linux Service Configure Example

    2024-05-05 00:52:02       12 阅读
  5. VBA 拆分Excel中的各sheet为文件

    2024-05-05 00:52:02       13 阅读
  6. 【代码随想录】day48

    2024-05-05 00:52:02       12 阅读