模式介绍

模板方法模式是一种行为型设计模式,它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。模板方法使得子类可以不改变算法的结构即可重新定义算法的某些特定步骤。

使用场景

  • 当一次性实现一个算法的不变部分,并将可变的行为留给子类来实现时
  • 当各子类中公共的行为应被提取出来并集中到一个公共父类中时
  • 当控制子类扩展时

代码示例

// 抽象类
public abstract class AbstractClass {
    // 模板方法
    public final void templateMethod() {
        primitiveOperation1();
        primitiveOperation2();
        hook();
    }

    // 基本方法1
    protected abstract void primitiveOperation1();

    // 基本方法2
    protected abstract void primitiveOperation2();

    // 钩子方法
    protected void hook() {
        // 默认空实现
    }
}

// 具体类A
public class ConcreteClassA extends AbstractClass {
    @Override
    protected void primitiveOperation1() {
        System.out.println("ConcreteClassA: primitiveOperation1");
    }

    @Override
    protected void primitiveOperation2() {
        System.out.println("ConcreteClassA: primitiveOperation2");
    }
}

// 具体类B
public class ConcreteClassB extends AbstractClass {
    @Override
    protected void primitiveOperation1() {
        System.out.println("ConcreteClassB: primitiveOperation1");
    }

    @Override
    protected void primitiveOperation2() {
        System.out.println("ConcreteClassB: primitiveOperation2");
    }
}

优缺点

优点

  • 提高代码复用性
  • 扩展性好
  • 符合开闭原则

缺点

  • 类的数量增加
  • 增加了系统复杂度
  • 继承关系自身缺点