详解:模板设计模式

模板设计模式(Template Pattern)是一种行为设计模式,在软件设计中有着广泛的应用,旨在提高代码的可维护性和可复用性。

一、定义与特点

定义

  • 模板设计模式定义了一个算法的骨架,将某些步骤推迟到子类中实现。这样,可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

特点

  • 定义算法骨架:在抽象类中定义一个算法的框架,即算法的骨架。
  • 具体步骤延迟到子类:将一些步骤的具体实现延迟到子类中,使得子类可以灵活地重新定义这些步骤。

二、结构与角色

抽象类(AbstractClass)

  • 实现了模板方法,定义了算法的骨架。
  • 包含了一些具体方法(有默认实现)和抽象方法(由子类实现)。

具体类(ConcreteClass)

  • 实现抽象类中的抽象方法,完成完整的算法。

三、举例

以下是一个关于咖啡和茶制备过程的例子,用于说明模板设计模式的应用:

1.创建一个抽象类Template,写了一个模版方法prepare,因为咖啡和茶制备过程:准备开水和倒进杯子这两个步骤都有并且一样所以直接提取出来放到模版中,因为煮的方法和添加的方法不同所以修饰为抽象类,要求子类继承重写实现。

public abstract class Template {
    // 准备饮料
    public void prepare() {
        // 准备开水
        System.out.println("准备开水");
        // 煮
        brew();
        // 倒进杯子
        System.out.println("倒进杯子");
        // 添加调味品
        addCondiments();
    }
    //抽象方法
    public abstract void brew();
    public abstract void addCondiments();
}

子类Coffee继承父类Template并重写父类的抽象方法

class Coffee extends Template {
    @Override
   public void brew() {
        System.out.println("煮咖啡");
    }

    @Override
   public  void addCondiments() {
        System.out.println("加糖和牛奶");
    }
}

子类Tea继承父类Template并重写父类的抽象方法

class Tea extends Template {
    @Override
    public void brew() {
        System.out.println("泡茶");
    }

    @Override
    public void addCondiments() {
        System.out.println("加柠檬");
    }
}

最后编写测试类,创建子类对象分别调用父类的模版方法prepare

 class Test {
    public static void main(String[] args) {
        Template coffee = new Coffee();
        coffee.prepare();
        System.out.println("=====================");
        Template tea = new Tea();
        tea.prepare();
    }
}

抽象类Template也可以这样写(将子类中公共的代码块进行封装并在prepare方法中调用):

public abstract class Template {
    // 准备饮料
   public void prepare() {
        // 准备开水
        boilWater();
        // 煮
        brew();
        // 倒进杯子
        pourInCup();
        // 添加调味品
        addCondiments();
    }

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

    public void boilWater() {
        System.out.println("准备开水");
    }

    public void pourInCup() {
        System.out.println("倒进杯子");
    }
}

四、模板设计步骤:

1.创建一个抽象类作为父类并创建一个模版方法,将子类中公共的代码块进行封装并在模版方法中调用

2.将子类特有的代码块封装成抽象的方法并在模版方法中调用

3.子类分别重写父类的抽象方法

4.在测试类中分别创建子类对象再调用父类的模版方法

示意图:

五、应用场景

  1. 算法框架固定,但具体步骤可能有变化:当多个类有相似的行为,但其中一些细节不同时,可以使用模板设计模式。
  2. 代码复用:通过将共同的行为放在一个抽象类的模板方法中,可以避免代码的重复。
  3. 框架设计:在框架设计中,模板模式经常用于定义框架的骨架和流程。
  4. 生命周期管理:在对象的生命周期管理中,模板模式可以确保某些过程按照一定的顺序执行。
  5. GUI应用中的事件处理:模板模式可以用于定义事件处理的框架。
  6. 数据库操作:在数据库操作中,可以使用模板模式来定义一些通用的步骤。

综上所述,模板设计模式是一种非常有用的设计模式,它可以帮助我们提高代码的可维护性和可复用性。通过定义一个算法的骨架,并将某些步骤推迟到子类中实现,我们可以在不改变算法结构的情况下,灵活地重新定义算法中的某些步骤。

相关推荐
捂月3 分钟前
Spring Boot 深度解析:快速构建高效、现代化的 Web 应用程序
前端·spring boot·后端
IT古董4 分钟前
【人工智能】Python在机器学习与人工智能中的应用
开发语言·人工智能·python·机器学习
繁依Fanyi8 分钟前
简易安卓句分器实现
java·服务器·开发语言·算法·eclipse
慧都小妮子19 分钟前
Spire.PDF for .NET【页面设置】演示:打开 PDF 时自动显示书签或缩略图
java·pdf·.net
m512723 分钟前
LinuxC语言
java·服务器·前端
IU宝28 分钟前
C/C++内存管理
java·c语言·c++
湫ccc28 分钟前
《Python基础》之pip换国内镜像源
开发语言·python·pip
瓜牛_gn29 分钟前
依赖注入注解
java·后端·spring
fhvyxyci29 分钟前
【C++之STL】摸清 string 的模拟实现(下)
开发语言·c++·string
hakesashou30 分钟前
Python中常用的函数介绍
java·网络·python