首页常见问题正文

什么是模板方法模式?_java设计模式基础

更新时间:2023-09-14 来源:黑马程序员 浏览量:

IT培训班

  模板方法模式(Template Method Pattern)是一种行为设计模式,它属于Gang of Four(GoF)设计模式之一。这个模式的核心思想是定义一个算法的骨架,将算法的具体步骤延迟到子类中实现,以允许子类在不改变算法结构的情况下重定义算法的某些步骤。模板方法模式通过提供一个模板(或者说是抽象基类)来封装算法,以确保算法的结构一致性,同时允许不同的子类提供不同的实现。

  以下是模板方法模式的关键要素和示例说明:

  1.抽象类(Abstract Class):

  抽象类定义了算法的骨架,它包含一个或多个抽象方法,这些方法代表算法中的步骤,但不提供具体的实现。

public abstract class AbstractClass {
    public void templateMethod() {
        step1();
        step2();
        step3();
    }

    protected abstract void step1();
    protected abstract void step2();
    protected abstract void step3();
}

  2.具体子类(Concrete Subclasses):

  具体子类继承抽象类并实现抽象方法,从而提供算法步骤的具体实现。

public class ConcreteClassA extends AbstractClass {
    @Override
    protected void step1() {
        // 具体实现步骤1的逻辑
    }

    @Override
    protected void step2() {
        // 具体实现步骤2的逻辑
    }

    @Override
    protected void step3() {
        // 具体实现步骤3的逻辑
    }
}

public class ConcreteClassB extends AbstractClass {
    @Override
    protected void step1() {
        // 不同的实现方式
    }

    @Override
    protected void step2() {
        // 不同的实现方式
    }

    @Override
    protected void step3() {
        // 不同的实现方式
    }
}

  3.模板方法(Template Method):

  模板方法是抽象类中定义的方法,它按照特定的顺序调用算法步骤,这个顺序是固定的,但具体步骤的实现可以在子类中变化。

1694654537543_模板方法模式.jpg

  4.钩子方法(Hook Methods):

  在抽象类中,可以包含一些可选的钩子方法,这些方法在模板方法中可以有默认实现,但子类可以选择性地覆盖它们以改变算法的行为。

public abstract class AbstractClass {
    // 模板方法
    public void templateMethod() {
        step1();
        step2();
        if (hook()) { // 钩子方法
            step3();
        }
    }

    protected abstract void step1();
    protected abstract void step2();
    protected abstract void step3();

    // 钩子方法,默认实现返回true
    protected boolean hook() {
        return true;
    }
}

  使用模板方法模式的好处包括:

  ·代码重用:模板方法将共同的行为放在抽象类中,可以在多个子类中共享。

  ·算法结构固定性:确保算法的基本结构不会改变,只是具体步骤的实现会变化。

  ·扩展性:子类可以轻松地扩展或修改算法的特定步骤,而无需改变整体算法结构。

  模板方法模式在Java中广泛用于创建具有相似结构但不同行为的类,例如,各种排序算法可以使用模板方法模式来实现,其中排序的比较和交换步骤在不同的子类中实现。这提供了一种灵活的方式来处理算法的变化和扩展。

分享到:
在线咨询 我要报名
和我们在线交谈!