目录
模板方法模式是一种基于继承的代码复用的行为型模式;在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基本方法中,在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类来覆盖某些步骤,从而使得相同的算法框架可以有不同的执行结果。本篇博客我们一起来学习模版方法模式。
代表这些具体逻辑步骤的方法称做基本方法(primitive method);而将这些基本方法汇总起来的方法叫做模板方法(template method),这个设计模式的名字就是从此而来。
定义
- 定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。简单地说,该模式就是将子类中共有的方法放到父类中。
- 模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术。没有关联关系。 因此,在模板方法模式的类结构图中,只有继承关系。
- 抽象模板(Abstract ):是一个抽象类。抽象类定义了若干个方法以表示算法的各个步骤,这些方法中有抽象方法也有非抽象方法,这些方法统称为基本方法(Primitive Operation)。重要的一点是,抽象模板中还定义了一个称之为模板方法的方法( 一般是一个具体方法 ),该方法不仅可以调用抽象类中实现的基本方法,也可以调用在抽象类的子类中实现的基本方法,还可以调用其他对象中的方法,即模板方法定义了算法的骨架。
- 具体模板(Concrete ):具体类是抽象类的子类,用于实现其父类中的抽象方法来完成子类特定算法的步骤,也可以覆盖父类中已经实现的具体基本操作。
对于模板方法模式,父类提供的构建步骤和顺序或者算法骨架,通常是不希望甚至是不允许子类去覆盖的,所以在某些场景中,可以直接将父类中提供骨架的方法声明为final类型。
优点
- 提高代码复用性
将相同部分的代码放在抽象的父类中,而将不同的代码放入不同的子类中,去除了子类中的重复代码。- 提高了拓展性 ,封装了不变部分,扩展了可变部分 。一般来说&