模板方法模式
意图
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
使用场景
模板方法应用于下列情况:
- 一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
- 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。首先识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
- 控制子类扩展。
结构
模板方法结构如下
AbstractClass
– 定义抽象的基本操作(Primitive Operation),具体的子类将重写它们来实现一个指定算法的步骤。
– 实现一个模板方法,定义一个算法的骨架。该模板方法不仅调用接口中的基本操作,也调用定义在AbstractClass或其他对象中的操作。ConcreteClass
– 实现基本操作来完成算法中与指定子类相关的步骤。
协作
ConcreteClass靠AbstractClass来实现算法中不变的步骤。
效果
模板方法模式是一种代码复用的基本技术。它们在类库中尤为重要,它们提取了类库中的公共行为。
- 模板方法模式使得扩展性更好
- 模板方法指定了逻辑,如果为模板方法添加final修饰符,那么子类也不能去修改逻辑。
- 钩子方法(Hook Method)在抽象中提供一个方法的空实现,子类可以根据自身需要来决定是否进行实现扩展。
模板方法模式实现(Implement)
案例
戴尔显示器在显示器的市场占有一席之地,现在要对安装戴尔显示器的过程进行实现。在安装显示器的过程中,一般有开箱,安装底座,连接显示器以及设置四个步骤,这里可以使用模板方法对安装过程进行实现。
代码实现
定义安装戴尔显示器的接口
安装型号U2515H显示器
安装型号U2417H显示器
进行安装
总结
模板方法结构比较简单,提高了系统的灵活性与扩展性。