模板模式(Template Pattern)是指定义一个算法骨架,并允许子类为一个或者多个步骤提供实现。模板模式使得子类可以在不改变算法结构的情况下,重新定义某些步骤,属于行为模式。
像简历模板一样,简历的格式不变,不同人的简历内容是一样的。
适用场景
- 一次性实现一个算法不可变的部分,并将可变的行为留给子类去实现
- 各个子类中公共的行为被提取出来集中到一个公共的父类中,从而避免代码重复
下面以简历模板为例
- 简历模板
public abstract class ResumeTemplate {
private boolean isLable=false;
/**
* 创建简历
*/
public void create(){
System.out.println("构建简历。。。。。。。");
salaryExpectation();
position();
if (isLable){
label();
}
evaluate();
}
/**
* 期望薪资
*/
public void salaryExpectation(){
System.out.println("默认薪资 0 元");
}
/**
* 职位
*/
abstract void position();
/**
* 标签
*/
abstract void label();
/**
* 评价
*/
abstract void evaluate();
public void setLable(boolean lable) {
isLable = lable;
}
}
- 我的简历模板
public class MyResume extends ResumeTemplate {
@Override
void position() {
System.out.println("Java开发岗位");
}
@Override
void label() {
System.out.println("勤奋,好学");
}
@Override
void evaluate() {
System.out.println("自我评价优良");
}
@Override
public void salaryExpectation() {
super.salaryExpectation();
System.out.println("修改期望薪资,1000000000元");
}
@Override
public void setLable(boolean lable) {
super.setLable(true);
}
}
- 运行
public class Run {
public static void main(String[] args) {
ResumeTemplate template = new MyResume();
template.create();
}
}
- 结果
构建简历。。。。。。。
默认薪资 0 元
修改期望薪资,1000000000元
Java开发岗位
自我评价优良
- 优点
- 提供代码的复用性
- 讲不同的代码写在父类中,去除子类重复的代码
- 缺点
- 每一个抽象类都需要一个子类来实现,导致类的数量增多
- 增加系统的复杂性
- 父类增加新的抽象方法,其子类都需要修改