模板方法模式
一、 模式名
模版方法,Template Method
二、 解决的问题
模版方法在父类中定义了某种算法的骨架,在子类中实现该算法骨架中调用的某些方法,从而达到改变该算法的目的。
如果不使用这种设计模式实现某些解决流程相同,只不过具体实现不同的问题,那么需要将该问题的解决流程重复多写几遍,增加了系统代码的冗余,降低了系统代码的灵活性。如果该问题的解决流程需要调整,那么所有利用该解决流程的方案都需要作出调整,这样无疑降低了系统可扩展性。
三、解决方案
可以看到定义了一个父类抽象类,抽象类中定义了某种算法的解决流程方法,其中某些关键步骤调用对应的抽象方法,两个子类分别继承该抽象类,实现对应的抽象方法,随后就能使用对应的算法。
模版方法的Java实现Demo如下:
abstract class AbstractClass { public void templateMethod() { if(abstractMethod1()) { abstractMethod2(); } } public abstract void abstractMethod1(); public abstract void abstractMethod2(); } SubClass1 extends AbstractClass { protected void abstractMethod1() { ... } protected void abstractMethod2() { ... } } // 使用 public class Main { public static void main(String[] args) { AbstractClass obj = new SubClass1(); // 调用模版方法 obj.templateMethod(); } }
常见应用场景:
1. JDBC
2. Spring中的 bean 加载