更新时间:2023-09-14 来源:黑马程序员 浏览量:
模板方法模式(Template Method Pattern)是一种行为设计模式,它属于Gang of Four(GoF)设计模式之一。这个模式的核心思想是定义一个算法的骨架,将算法的具体步骤延迟到子类中实现,以允许子类在不改变算法结构的情况下重定义算法的某些步骤。模板方法模式通过提供一个模板(或者说是抽象基类)来封装算法,以确保算法的结构一致性,同时允许不同的子类提供不同的实现。
以下是模板方法模式的关键要素和示例说明:
抽象类定义了算法的骨架,它包含一个或多个抽象方法,这些方法代表算法中的步骤,但不提供具体的实现。
public abstract class AbstractClass { public void templateMethod() { step1(); step2(); step3(); } protected abstract void step1(); protected abstract void step2(); protected abstract void step3(); }
具体子类继承抽象类并实现抽象方法,从而提供算法步骤的具体实现。
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() { // 不同的实现方式 } }
模板方法是抽象类中定义的方法,它按照特定的顺序调用算法步骤,这个顺序是固定的,但具体步骤的实现可以在子类中变化。
在抽象类中,可以包含一些可选的钩子方法,这些方法在模板方法中可以有默认实现,但子类可以选择性地覆盖它们以改变算法的行为。
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中广泛用于创建具有相似结构但不同行为的类,例如,各种排序算法可以使用模板方法模式来实现,其中排序的比较和交换步骤在不同的子类中实现。这提供了一种灵活的方式来处理算法的变化和扩展。