MST

星途 面试题库

面试题:Java模板方法模式在业务流程标准化中的应用场景

请举例说明在Java开发中,哪些业务场景适合使用模板方法模式来实现业务流程的标准化,并简述如何通过模板方法模式来设计相关的类和方法。
28.0万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

适合使用模板方法模式的业务场景

  1. 报表生成:不同类型的报表(如日报、周报、月报)生成逻辑大致相同,都包含数据查询、数据处理、报表格式化等步骤,但每个步骤的具体实现可能不同。例如在财务报表生成中,日报、月报都需要从数据库获取数据,但获取的数据范围和计算方式有差异。
  2. 游戏开发中的角色创建流程:创建不同类型的角色(如战士、法师、刺客),都有选择角色种族、分配初始属性、选择技能等相似步骤,但具体每个步骤对于不同角色有不同的设定。
  3. 文件处理:读取不同格式文件(如txt、csv、xml),都有打开文件、读取内容、关闭文件的流程,但读取内容的方式不同。

通过模板方法模式设计相关类和方法

  1. 定义抽象类
    public abstract class AbstractReportGenerator {
        // 模板方法
        public final void generateReport() {
            queryData();
            processData();
            formatReport();
        }
    
        // 具体子类实现的抽象方法
        protected abstract void queryData();
        protected abstract void processData();
        protected abstract void formatReport();
    }
    
  2. 创建具体子类
    public class DailyReportGenerator extends AbstractReportGenerator {
        @Override
        protected void queryData() {
            // 实现日报数据查询逻辑
            System.out.println("查询日报数据");
        }
    
        @Override
        protected void processData() {
            // 实现日报数据处理逻辑
            System.out.println("处理日报数据");
        }
    
        @Override
        protected void formatReport() {
            // 实现日报格式化逻辑
            System.out.println("格式化日报");
        }
    }
    
    public class MonthlyReportGenerator extends AbstractReportGenerator {
        @Override
        protected void queryData() {
            // 实现月报数据查询逻辑
            System.out.println("查询月报数据");
        }
    
        @Override
        protected void processData() {
            // 实现月报数据处理逻辑
            System.out.println("处理月报数据");
        }
    
        @Override
        protected void formatReport() {
            // 实现月报格式化逻辑
            System.out.println("格式化月报");
        }
    }
    
  3. 使用示例
    public class Main {
        public static void main(String[] args) {
            AbstractReportGenerator dailyReport = new DailyReportGenerator();
            dailyReport.generateReport();
    
            AbstractReportGenerator monthlyReport = new MonthlyReportGenerator();
            monthlyReport.generateReport();
        }
    }
    

在上述代码中,AbstractReportGenerator类定义了一个模板方法generateReport,它规定了报表生成的整体流程。具体的查询数据、处理数据和格式化报表的逻辑由具体子类DailyReportGeneratorMonthlyReportGenerator来实现,从而实现业务流程的标准化。