zl程序教程

您现在的位置是:首页 >  其他

当前栏目

设计模式——模板方法模式

2023-09-11 14:20:18 时间

适用场景:
在多个类中存在相同的算法或操作步骤,但是具体实现可能不同。使用模板模式可以将这些共同的部分抽象出来,在一个父类中定义好,并在子类中实现具体的细节。

当我们需要在不改变算法整体结构的情况下,只修改算法某一小部分的实现时,可以使用模板模式。这样可以避免重复编写代码,并且保持算法的完整性和稳定性。

模板模式还可以用于框架设计中,将框架的核心算法定义成模板方法,让客户端通过继承来实现自己的业务逻辑,从而提高代码的可重用性和可维护性。

// 抽象类,定义模板方法和抽象方法
abstract class AbstractClass {
    // 模板方法
    public final void templateMethod() {
        // 公共逻辑
        System.out.println("Starting template method");

        // 钩子方法,子类可以选择是否实现
        if (hookMethod()) {
            System.out.println("Hook method returned true");
        }

        // 抽象方法,由子类实现
        primitiveOperation();

        // 公共逻辑
        System.out.println("Finishing template method");
    }

    // 钩子方法
    protected boolean hookMethod() {
        return false;
    }

    // 抽象方法
    protected abstract void primitiveOperation();
}
// 具体实现类
class ConcreteClass extends AbstractClass {
    // 实现抽象方法
    @Override
    protected void primitiveOperation() {
        System.out.println("Doing primitive operation in concrete class");
    }

    // 实现钩子方法
    @Override
    protected boolean hookMethod() {
        return true;
    }
}
// 客户端代码
public class Client {
    public static void main(String[] args) {
        AbstractClass abstractClass = new ConcreteClass();
        abstractClass.templateMethod();
    }
}