定义:
定义一个算法的步骤框架,而将一部分功能延迟到子类,而使得子类不用改变算法的结构即可改变某些特定的步骤。
类型:
行为型模式
类图:

由抽象方法定义算法的流程,具体的实现交给子类,完成特定的相关步骤。
模板方法模式的结构:
由一个抽象类和一个或一组实现类组成,抽象类中的方法分为3种:
抽象方法:父类中只声明,不加以实现,只定义其规范
模板方法:由抽象类声明并加以实现,一般来说模板方法调用抽象方法来完成主要的逻辑。模板方法大都是final类型,指明父类的模板方法不能被重写
钩子方法:由抽象类声明加以实现,但子类可以扩展,通过扩展钩子方法来影响模板方法的逻辑。
模板方法模式的总结:
优点:
容易扩展:模板方法不易改变,抽象方法容易改变,通过增加实现类的方法实现功能的扩展。符合开闭原则(对拓展开放,对修改关闭 OCP)
便于维护:模板方法,主要逻辑相同,若不使用模板方法设计模式,这些代码零散的分散到不同的类中,不利于维护。
比较灵活:因为有钩子方法,子类的实现可以影响到父类的,但违反了里氏替换原则(LSP)。
缺点:
每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。
场景: