模板方法设计模式的学习和使用

1、模板方法设计模式的学习

  当涉及到一系列具有相似行为的算法或操作时,模板方法设计模式是一种有效的设计模式。它允许你定义一个算法的骨架,同时将某些步骤的实现细节交给子类来实现。
  模板方法模式基于以下两个核心原则:

  1. 抽象类定义模板方法骨架:抽象类中定义一个模板方法,该方法确定了算法的骨架结构,包含一系列的步骤,其中某些步骤可以是具体实现,某些步骤可以是抽象方法,由子类实现。这个模板方法定义了算法的顺序和结构,但具体的实现可以在子类中有所不同。
  2. 具体子类实现细节:具体的子类继承抽象类并实现其中的抽象方法,以提供对应算法步骤的具体实现。每个子类都可以根据自身的特定需求来实现这些抽象方法,从而定制化算法的行为。
    在这里插入图片描述

2、模板方法设计模式的使用

  实现一个数据导入工具,支持从不同数据源(例如数据库、Excel、CSV文件)导入数据,并提供一致的导入过程和结果输出。
实现:
1、定义一个抽象类 DataImporter,作为数据导入工具的模板类。
2、在 DataImporter 中定义一个模板方法 importData(),用于规定导入数据的流程。
3、在 DataImporter 中定义若干抽象方法,例如 extractData() 用于从数据源提取数据,transformData() 用于数据转换,loadData() 用于数据加载等。
4、创建具体的数据导入类,继承 DataImporter 并实现其中的抽象方法,以支持从不同的数据源导入数据。
5、在 importData() 方法中按照事先定义的流程依次调用抽象方法,完成数据导入的过程。
数据导入工具的模板类

public abstract class DataImporter {

    /**
     * 规定导入数据的流程
     */
    protected void importData() {
        this.loadData(this.transformData(this.extractData()));
    }

    /**
     * 从数据源提取数据
     *
     * @return
     */
    protected abstract Object extractData();

    /**
     * 数据转换
     *
     * @param data
     * @return
     */
    protected abstract String transformData(Object data);

    /**
     * 数据加载
     *
     * @param data
     */
    private void loadData(String data) {
        System.out.println("数据加载:" + data);
    }
}

数据库数据导入

public class DataBaseDataImporter extends DataImporter {
    @Override
    protected Object extractData() {
        return "数据库的数据";
    }

    @Override
    protected String transformData(Object data) {
        return "这是" + data;
    }
}

excel数据导入

public class ExcelDataImporter extends DataImporter {
    @Override
    protected Object extractData() {
        return "excel的数据";
    }

    @Override
    protected String transformData(Object data) {
        return "这些是" + data;
    }
}

CSV文件的数据

public class CsvDataImporter extends DataImporter {
    @Override
    protected Object extractData() {
        return "CSV文件的数据";
    }

    @Override
    protected String transformData(Object data) {
        return "这些都是" + data;
    }
}

模板设计模式客户端

public class TemplateClient {
    public static void main(String[] args) {
        ExcelDataImporter excelDataImporter = new ExcelDataImporter();
        excelDataImporter.importData();

        CsvDataImporter csvDataImporter = new CsvDataImporter();
        csvDataImporter.importData();

        DataBaseDataImporter dataBaseDataImporter = new DataBaseDataImporter();
        dataBaseDataImporter.importData();
    }
}
数据加载:这些是excel的数据
数据加载:这些都是CSV文件的数据
数据加载:这是数据库的数据

3、总结

  模板方法设计模式的优势在于提供了一种代码复用的方式,可以避免在每个子类中重复编写相同的代码,同时允许子类在需要的地方提供自定义的实现。这样,模板方法模式实现了算法的核心部分集中管理,同时保留了灵活性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值