Java设计模式(14)行为型:模板方法模式
(一)模式概述
模板方法模式是指定义一个操作中算法的骨架,而将一些步骤延迟到子类中。设计者需要给出一个算法的固定步骤,并将某些步骤的具体实现留给子类来实现。具体模板实现算法细节不会改变整个算法的骨架,但注意要将各个子类公共行为提取出来集中到一个共同的父类中以避免代码重复。
(二)模式结构
1)抽象模板对象:
定义业务逻辑的基本流程,但不提供具体实现算法。
2)具体模板实现者:
继承抽象模板对象,实现具体业务函数。
(三)Demo
抽象模板对象,定义逻辑顺序并将实现过程定义为抽象方法。
public abstract class AbstractTemplate {
String data;
// 逻辑顺序(模式核心)
public final void templateMethod() {
getData();
calcData();
printData();
}
// 普通方法,可能已经实现,也可能需要子类实现
abstract void getData();
abstract void calcData();
void printData() {
System.out.println(data);
}
}
具体模板对象实现者Template1:
public class Template1 extends AbstractTemplate {
@Override
void getData() {
data = "TemplateMethod1";
}
@Override
void calcData() {
data = "do:" + data;
}
}
具体模板对象实现者Template2:
public class Template2 extends AbstractTemplate {
@Override
void getData() {
data = "TemplateMethod2";
}
@Override
void calcData() {
data = "do:" + data;
}
}
执行过程:
AbstractTemplate template1 = new Template1();
template1.templateMethod();
AbstractTemplate template2 = new Template2();
template2.templateMethod();
执行结果:
do:TemplateMethod1
do:TemplateMethod2
(注)上例中Template1和Template2的逻辑过程是一样的,只是具体实现不同。模板方法模式使用的非常广泛,只要是逻辑顺序固定但实现不同的,都可以是使用模板方法模式。
(注)本模式的重点在于抽象模板对象必须定义整个业务逻辑基本流程,并由子类来实现,不同的子类实现同一业务逻辑流程会有不同的结果。
还没有评论,来说两句吧...