模板方法模式需要注意抽象类与具体子类之间的协作。
主要包含如下角色:
(1)抽象类
抽象模板类,负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。
抽象方法:在抽象类中声明,由具体子类实现。
具体方法:在抽象类中已经实现,在具体子类中可以继承或重写它。
钩子方法:在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种。
(2)具体子类
具体实现类,实现抽象类中所定义的抽象方法和钩子方法。
package com.example.designmodedemo.principle.template; /** * 抽象类 */ public abstract class AbstractTemplate { // 具体方法 public void specificMethod(){ System.out.println(":> 抽象类中具体方法调用"); } // 抽象方法,子类需要重新实现 public abstract void absMethod1(); public abstract void absMethod2(); // 模板方法 public void template(){ specificMethod(); absMethod1(); absMethod2(); } }
package com.example.designmodedemo.principle.template; /** * 具体子类 继承 抽象类 * 重写抽象方法,做具体实现 */ public class SpecificTemplate extends AbstractTemplate{ @Override public void absMethod1() { System.out.println(":> 具体子类重实现 absMethod1"); } @Override public void absMethod2() { System.out.println(":> 具体子类重实现 absMethod2"); } }
/** * 模板方法 */ private void principle_template() { AbstractTemplate template = new SpecificTemplate(); template.template(); }
通常适用下面几个场景:
技术永不眠!我们下期见!