Java中的模板方法模式详解
字数 502 2025-11-09 00:20:50

Java中的模板方法模式详解

一、模式描述
模板方法模式是一种行为型设计模式,它在父类中定义算法的骨架(即步骤顺序),而将某些步骤的具体实现延迟到子类中。该模式允许子类在不改变算法结构的情况下重新定义某些步骤,从而实现代码复用和扩展性。

二、模式结构

  1. 抽象类(Abstract Class)
    • 定义算法的模板方法(final修饰,防止子类重写算法结构)。
    • 声明抽象方法(需子类实现)或钩子方法(默认空实现,子类可选重写)。
  2. 具体类(Concrete Class)
    • 实现父类中的抽象方法,填充算法细节。

三、实现步骤

  1. 定义抽象类

    public abstract class AbstractTemplate {  
        // 模板方法:定义算法步骤  
        public final void execute() {  
            step1();  
            step2();  
            if (needStep3()) { // 钩子方法控制流程  
                step3();  
            }  
        }  
    
        // 抽象方法:必须由子类实现  
        protected abstract void step1();  
        protected abstract void step2();  
    
        // 钩子方法:子类可选重写  
        protected boolean needStep3() {  
            return false;  
        }  
    
        // 默认实现  
        protected void step3() {  
            System.out.println("默认步骤3");  
        }  
    }  
    
  2. 创建具体类

    public class ConcreteTemplateA extends AbstractTemplate {  
        @Override  
        protected void step1() {  
            System.out.println("A实现步骤1");  
        }  
    
        @Override  
        protected void step2() {  
            System.out.println("A实现步骤2");  
        }  
    
        // 重写钩子方法,启用步骤3  
        @Override  
        protected boolean needStep3() {  
            return true;  
        }  
    }  
    
    public class ConcreteTemplateB extends AbstractTemplate {  
        @Override  
        protected void step1() {  
            System.out.println("B实现步骤1");  
        }  
    
        @Override  
        protected void step2() {  
            System.out.println("B实现步骤2");  
        }  
        // 不重写needStep3(),默认跳过步骤3  
    }  
    
  3. 使用模板方法

    public class Demo {  
        public static void main(String[] args) {  
            AbstractTemplate A = new ConcreteTemplateA();  
            A.execute(); // 输出:A实现步骤1 → A实现步骤2 → 默认步骤3  
    
            AbstractTemplate B = new ConcreteTemplateB();  
            B.execute(); // 输出:B实现步骤1 → B实现步骤2  
        }  
    }  
    

四、模式优势

  1. 复用性:将公共逻辑封装在父类,避免代码重复。
  2. 扩展性:子类可通过重写方法灵活扩展特定步骤。
  3. 符合开闭原则:新增子类无需修改父类逻辑。

五、应用场景

  • 多个类有相似流程,但部分步骤实现不同(如JDBC模板、Spring的JdbcTemplate)。
  • 需要控制子类扩展行为时(如通过钩子方法)。

六、注意事项

  • 模板方法应声明为final,防止子类破坏算法结构。
  • 抽象方法不宜过多,避免增加子类实现负担。
Java中的模板方法模式详解 一、模式描述 模板方法模式是一种行为型设计模式,它在父类中定义算法的骨架(即步骤顺序),而将某些步骤的具体实现延迟到子类中。该模式允许子类在不改变算法结构的情况下重新定义某些步骤,从而实现代码复用和扩展性。 二、模式结构 抽象类(Abstract Class) : 定义算法的模板方法( final 修饰,防止子类重写算法结构)。 声明抽象方法(需子类实现)或钩子方法(默认空实现,子类可选重写)。 具体类(Concrete Class) : 实现父类中的抽象方法,填充算法细节。 三、实现步骤 定义抽象类 : 创建具体类 : 使用模板方法 : 四、模式优势 复用性 :将公共逻辑封装在父类,避免代码重复。 扩展性 :子类可通过重写方法灵活扩展特定步骤。 符合开闭原则 :新增子类无需修改父类逻辑。 五、应用场景 多个类有相似流程,但部分步骤实现不同(如JDBC模板、Spring的 JdbcTemplate )。 需要控制子类扩展行为时(如通过钩子方法)。 六、注意事项 模板方法应声明为 final ,防止子类破坏算法结构。 抽象方法不宜过多,避免增加子类实现负担。