Java模板方法设计模式
定义
模板方法模式是一种行为设计模式,它定义了一个操作中的算法的框架,而将一些步骤延迟到子类中。这样,子类可以在不改变算法结构的情况下重定义该算法的某些特定步骤
对应角色
- 抽象类(Abstract Class):定义了一个模板方法,该方法给出了算法的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。
- 具体类(Concrete Class):实现抽象类中的抽象操作,完成算法中与特定子类相关的步骤。
优缺点
优点
- 提高代码复用性:将相同部分代码放在抽象的父类中。
- 提高扩展性:将不同的代码放在不同的子类中,通过对子类的扩展增加新的行为。
缺点
- 模板方法会带来代码阅读的难度,因为整个算法流程都在父类中定义,而且子类会对它进行扩展。
- 模板方法会带来代码复杂度,因为它需要使用抽象类和接口,而这些都会增加代码的复杂度。
应用场景
- 算法的整体步骤很固定,但其中某些部分易变。
- 多个子类有公共的方法,并且逻辑基本相同。
- 重要的、复杂的方法可以考虑作为模板方法。
实例
//抽象
public abstract class AbstractClass {
public final void templateMethod() {
primitiveOperation1();
primitiveOperation2();
concreteOperation();
hook();
}
protected abstract void primitiveOperation1();
protected abstract void primitiveOperation2();
private final void concreteOperation() {
// do something
}
protected void hook() {
}
}
//具体实现
public class ConcreteClass extends AbstractClass {
@Override
protected void primitiveOperation1() {
// do something
}
@Override
protected void primitiveOperation2() {
// do something
}
}