模版方法设计模式(Template Method Design Pattern)[论点:概念、组成角色、相关图示、示例代码、适用场景]

概念

        模板方法设计模式(Template Method Design Pattern)是一种行为型设计模式,它定义了一个算法的步骤骨架,将这些步骤的具体实现延迟到子类中。模板方法模式可以使子类在不改变算法结构的情况下,重新定义算法中的某些步骤。

组成角色:

  1. 抽象类(Abstract Class):定义了一套算法骨架,包括具体方法、抽象方法和模板方法。模板方法定义了算法的步骤,并依次调用相应的具体方法。
  2. 具体子类(Concrete Class):实现抽象类中的抽象方法,提供具体的算法实现。

相关图示

在这里插入图片描述

示例代码

// 抽象类,定义算法骨架
public abstract class AbstractTemplate {
    
    
    // 具体方法
    protected void step1() {
    
    
        System.out.println("Step 1: Preparation");
    }

    // 抽象方法,由子类实现
    protected abstract void step2();

    // 具体方法
    protected void step3() {
    
    
        System.out.println("Step 3: Clean up");
    }

    // 模板方法,定义算法步骤
    public final void templateMethod() {
    
    
        step1();
        step2();
        step3();
    }
}

// 具体子类A
public class ConcreteClassA extends AbstractTemplate {
    
    
    @Override
    protected void step2() {
    
    
        System.out.println("Step 2: ConcreteClassA implementation");
    }
}

// 具体子类B
public class ConcreteClassB extends AbstractTemplate {
    
    
    @Override
    protected void step2() {
    
    
        System.out.println("Step 2: ConcreteClassB implementation");
    }
}

public class TemplateMethodDemo {
    
    
    public static void main(String[] args) {
    
    
        AbstractTemplate templateA = new ConcreteClassA();
        templateA.templateMethod();

        System.out.println("--------------------");

        AbstractTemplate templateB = new ConcreteClassB();
        templateB.templateMethod();
    }
}

运行结果

在这里插入图片描述

适用场景

  1. 一系列算法或操作的骨架已经确定,但其中的某些步骤可以有多种实现或可变化。通过使用模板方法,这些可变化的步骤可以被推迟到子类中实现,从而实现代码复用和灵活性。
  2. 避免代码重复。当存在多个类,它们之间的功能和操作步骤相似,但细节上存在差异时,可以考虑使用模板方法设计模式。将相同的部分提取到抽象类中,将可变部分交由子类实现,从而达到减少重复代码的目的。
  3. 封装不变部分,扩展可变部分。通过将不变的部分封装在抽象类中,将可变的部分延迟到具体子类实现,保证了代码的稳定性和可扩展性。
  4. 控制子类扩展。模板方法设计模式中的模板方法通常是一个不可被修改的方法,它定义了整个算法的执行顺序。子类可以重写模板方法中的某些步骤,但不能改变模板方法的结构和执行顺序。这样可以更好地控制子类的行为和扩展。

        举个例子,一个软件安装程序可能包括以下步骤:验证许可证、选择安装路径、安装软件、配置软件。其中验证许可证和安装路径这两个步骤可能因产品不同而有所差异,而安装和配置软件的步骤基本相同。这时,可以使用模板方法设计模式,将验证许可证和选择安装路径的实现留给具体子类,而将相同的安装和配置软件的步骤放在抽象类中。

猜你喜欢

转载自blog.csdn.net/asd1358355022/article/details/130410190