设计模式 (行为型) 之模板方法模式 (Template Method Pattern)
模板方法模式是一种基于继承的代码复用,它是一种类行为型模式;是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基本方法中,在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类来覆盖某些步骤,从而使得相同的算法框架可以有不同的执行结果。模板方法模式提供了一个模板方法来定义算法框架,而某些具体步骤的实现可以在其子类中完成。
核心
概念: 定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法模式结构重要核心模块:
AbstractClass(抽象类)
在抽象类中定义了一系列基本操作(PrimitiveOperations),这些基本操作可以是具体的,也可以是抽象的,每一个基本操作对应算法的一个步骤,在其子类中可以重定义或实现这些步骤。同时,在抽象类中实现了一个模板方法(Template Method),用于定义一个算法的框架,模板方法不仅可以调用在抽象类中实现的基本方法,也可以调用在抽象类的子类中实现的基本方法,还可以调用其他对象中的方法。所以模板方法模式中的抽象层只能是抽象类,而不是接口。
ConcreteClass(具体子类)
它是抽象类的子类,用于实现在父类中声明的抽象基本操作以完成子类特定算法的步骤,也可以覆盖在父类中已经实现的具体基本操作。
使用场景
对一些复杂的算法进行分割,将其算法中固定不变的部分设计为模板方法和父类具体方法,而一些可以改变的细节由其子类来实现。
各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。
需要通过子类来决定父类算法中某个步骤是否执行,实现子类对父类的反向控
制。
程序猿实例
这里展示一个模板方法模式最基本的简单例子,不多解释:
package yanbober.github.io;
//AbstractClass(抽象类)
abstract class AbstractClass {
protected abstract void absMethod();
protected void hookMethod() {
//base null
}
private final void concreteMethod() {
System.out.println("Base Logic Code!");
}
public void templateMethod() {
absMethod();
hookMethod();
concreteMethod();
}
}
//ConcreteClass(具体子类)
class ConcreteClass extends AbstractClass {
@Override
protected void absMethod() {
System.out.println("Signal Logic Code!");
}
@Override
protected void hookMethod() {
super.hookMethod();
System.out.println("hookMethod Logic Code!");
}
}
//客户端
评论