【Java设计模式】3模板方法

定义

高层定义骨架,底层实现细节

适用于流程固定,但某些步骤不确定或可替换的情况。

具体描述

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

模板方法模式通常包含以下角色:

  1. 抽象类(Abstract Class):抽象类定义了算法的骨架,它包含一个模板方法(Template Method),该方法定义了算法的步骤顺序,并可以包含默认实现或抽象方法。

  2. 具体子类(Concrete Subclasses):具体子类继承自抽象类,并实现抽象方法,以提供算法的具体实现。

模板方法模式的关键思想是将算法的不变部分放在抽象类中,而将可变部分延迟到子类中。这样可以确保算法的整体结构稳定,同时允许子类灵活地实现自己的变化部分。

下面是一个简单的Java示例,演示了模板方法模式的应用:

// 抽象类定义模板方法
abstract class AbstractClass {
    // 模板方法,定义算法的骨架
    public void templateMethod() {
        step1();
        step2();
        step3();
    }

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

    // 默认实现的方法
    protected void step3() {
        System.out.println("Default implementation of step3");
    }
}

// 具体子类1
class ConcreteClass1 extends AbstractClass {
    @Override
    protected void step1() {
        System.out.println("ConcreteClass1: Step 1");
    }

    @Override
    protected void step2() {
        System.out.println("ConcreteClass1: Step 2");
    }
}

// 具体子类2
class ConcreteClass2 extends AbstractClass {
    @Override
    protected void step1() {
        System.out.println("ConcreteClass2: Step 1");
    }

    @Override
    protected void step2() {
        System.out.println("ConcreteClass2: Step 2");
    }

    @Override
    protected void step3() {
        System.out.println("ConcreteClass2: Step 3 (Override)");
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        AbstractClass template1 = new ConcreteClass1();
        template1.templateMethod();

        AbstractClass template2 = new ConcreteClass2();
        template2.templateMethod();
    }
}

在上面的示例中,AbstractClass 是抽象类,定义了一个模板方法 templateMethod,包含算法的骨架,以及三个步骤 step1step2step3ConcreteClass1ConcreteClass2 是具体子类,它们分别实现了 step1step2,而 ConcreteClass2 重写了 step3 方法。

当客户端代码使用具体子类来调用模板方法时,会按照定义的算法骨架顺序执行各个步骤。这使得子类可以在不改变算法整体结构的情况下,重新定义或扩展算法的某些部分。这种模式适用于需要在一组相关类中实现相似算法的情况,同时允许每个类根据自身需要进行定制。

你可能感兴趣的:(java,设计模式,python)