适用场景:
在多个类中存在相同的算法或操作步骤,但是具体实现可能不同。使用模板模式可以将这些共同的部分抽象出来,在一个父类中定义好,并在子类中实现具体的细节。
当我们需要在不改变算法整体结构的情况下,只修改算法某一小部分的实现时,可以使用模板模式。这样可以避免重复编写代码,并且保持算法的完整性和稳定性。
模板模式还可以用于框架设计中,将框架的核心算法定义成模板方法,让客户端通过继承来实现自己的业务逻辑,从而提高代码的可重用性和可维护性。
// 抽象类,定义模板方法和抽象方法
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();
}
}