定义
定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
通用类图
角色
AbstractClass(抽象类)
AbstractClass
角色不仅负责实现模板方法,还负责声明在模板方法中所使用到的抽象方法。
ConcreteClass(具体类)
该角色负责具体实现 AbstractClass
角色中定义的抽象方法。
实现
/**
* 抽象类
*/
public abstract class AbstractClass {
/**
*模板方法,定义了算法
*/
public final void templateMethod() {
open();
print();
close();
}
abstract void open();
abstract void print();
abstract void close();
}
/**
* 具体类
*/
public class ConcreteClass extends AbstractClass {
private String str;
public ConcreteClass(String str) {
this.str = str;
}
@Override
void open() {
System.out.println("+----+");
}
@Override
void print() {
System.out.println(this.str);
}
@Override
void close() {
System.out.println("+----+");
}
}
public class TemplateMethodMain {
public static void main(String[] args) {
AbstractClass abstractClass = new ConcreteClass("hello");
abstractClass.templateMethod();
}
}
运行以后,输出:
+----+
hello
+----+