前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【玩转23种Java设计模式】行为型模式篇:模板模式

【玩转23种Java设计模式】行为型模式篇:模板模式

作者头像
程序员云帆哥
发布2023-07-27 21:14:45
1440
发布2023-07-27 21:14:45
举报
文章被收录于专栏:程序员云帆哥

软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

汇总目录链接:【玩转23种Java设计模式】学习目录汇总整理

一、简介

  模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern), 它是一种行为设计模式, 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤。

  角色:

  • 抽象类(Abstract Class):抽象类定义了算法的框架,其中包含一个或多个抽象方法和模板方法。抽象方法用于延迟到子类实现的具体步骤,而模板方法定义了算法的框架,其中包含一系列的步骤,这些步骤可以是具体方法或抽象方法。
  • 具体类(Concrete Class):具体类是抽象类的子类,它实现了抽象方法,完成算法的具体步骤。

二、实例

文件处理,公共下载和公共读取,特定处理数据。

1、模板抽象类(AbstractTemplate)

代码语言:javascript
复制
@Slf4j
public abstract class AbstractTemplate {
    public void execute(String filePath) {

        download(filePath);

        read(filePath);

        deal(filePath);
    }

    public void download(String filePath) {
        log.info("公共下载:{}", filePath);
    }

    public void read(String filePath) {
        log.info("公共读取:{}", filePath);
    }

    public abstract void deal(String filePath);
}

2、文件服务类1(OneFileService )

代码语言:javascript
复制
@Slf4j
public class OneFileService extends AbstractTemplate {
    @Override
    public void deal(String filePath) {
        log.info("OneFileService 处理数据:{}", filePath);
    }
}

3、文件服务类2(TwoFileService )

代码语言:javascript
复制
@Slf4j
public class TwoFileService extends AbstractTemplate {
    @Override
    public void deal(String filePath) {
        log.info("TwoFileService 处理数据:{}", filePath);
    }
}

4、测试类(Main)

代码语言:javascript
复制
public class Main {
    public static void main(String[] args) {
        OneFileService oneFileService = new OneFileService();
        oneFileService.execute("D:\\test.txt");
    }
}

5、后台输出

代码语言:javascript
复制
公共下载:D:\test.txt
公共读取:D:\test.txt
OneFileService 处理数据:D:\test.txt

三、总结

1、优点

  • 固定的算法框架,降低了算法的设计和实现的复杂度。
  • 提供了一种简单的扩展和定制算法的方式,通过子类可以灵活地实现算法中的具体步骤,同时保持了算法的整体结构的稳定性。
  • 通过抽象父类和具体子类的分离,提高了代码的可维护性和可复用性,减少了重复代码的编写。

2、缺点

  • 如果模板方法本身需要的改动较多,可能需要修改抽象父类或者大量的子类,导致系统的扩展性变差。
  • 如果算法的步骤太多或者过于复杂,可能会导致模板方法变得庞大,不易维护。

3、应用场景

  • 算法的结构固定,但是某些具体步骤的实现可能变化。
  • 多个类具有相似的行为。
  • 需要控制算法的执行流程。
  • 提供一个框架或工具的扩展点。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、简介
  • 二、实例
    • 1、模板抽象类(AbstractTemplate)
      • 2、文件服务类1(OneFileService )
        • 3、文件服务类2(TwoFileService )
          • 4、测试类(Main)
            • 5、后台输出
            • 三、总结
              • 1、优点
                • 2、缺点
                  • 3、应用场景
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档