Author:赵志乾
Date:2019-03-10
Declaration:All Right Reserved!!!
1、模式解释
所谓的模板方法模式,是指在进程运行期间,通用处理流程在父类方法中执行(模板方法),而涉及到流程中某些细节点会跳转到子类方法去执行的一种设计理念。
我们知道,通常类层次设计中,倾向于将流程执行重点放于子类中,即在子类中调用父类实现的方法,通过子类中增加方法来实现新功能或者在子类中重写父类的方法可以改变程序的行为。但在模板方法模式中,我们会站在父类的角度去思考,核心流程在父类方法中,这些方法称为模板方法,模板方法只是确定了处理流程,对于具体细节会由抽象方法的调用来为子类方法留下槽位。子类在实现时只须按照诉求实现父类中的抽象方法,即可同父类协作,完成模板方法所定义的处理流程。
2、模式补充
模板方法模式其最大的特点是父类和子类关联性较大,可以将一些通用的逻辑处理归置到模板方法中,差一点交由子类来实现。对于使用模板方法模式的设计中,在实现子类时,我们需要理解其所实现抽象方法在模板方法中的调用时机,否则,很难设计出合适的子类。
3、实现
模板类:
package com.zhaozhiqian;
public abstract class TemplateClass {
// 模板方法:定义通用的处理流程
public void display(String name){
start();
sayHello(name);
stop();
}
// 子类需要实现的具体功能点
protected abstract void start();
protected abstract void sayHello(String name);
protected abstract void stop();
}
子类:
package com.zhaozhiqian.impl;
import com.zhaozhiqian.TemplateClass;
public class Start extends TemplateClass {
// 子类实现细节功能点,父类在模板方法中进行功能点组合
@Override
protected void start() {
System.out.println("*********start**********");
}
@Override
protected void sayHello(String name) {
System.out.println(name+" hello!");
}
@Override
protected void stop() {
System.out.println("*********stop**********");
}
}
测试类:
package com.zhaozhiqian;
import com.zhaozhiqian.impl.Start;
public class Main {
public static void main(String[] args) {
TemplateClass template = new Start();
template.display("小王");
}
}
输出结果:
*********start**********
小王 hello!
*********stop**********
参考资料:《图解设计模式》