描述
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
主要角色
模板方法(Template Method)包含两个角色
- 抽象类/抽象模板(Abstract Class)
- 具体子类/具体实现(Concrete Class)
代码实现
/**
* @author:lshady 定义规则
* @DATA:2021-09-07 01:00:30
*/
public abstract class CookTemplate {
public void stirFryRule(){
addWater();
openFire();
addSeasoning();
getUp();
}
//加水
public void addWater(){
System.out.println("加水中");
}
//开火
public void openFire(){
System.out.println("开火!!!");
}
//加调料
public abstract void addSeasoning();
//起锅
public void getUp(){
System.out.println("起锅");
}
}
public class Barbecue extends CookTemplate{
@Override
public void addSeasoning() {
System.out.println("烧烤加孜然调料");
}
}
public class Drumstick extends CookTemplate{
@Override
public void addSeasoning() {
System.out.println("鸡腿加辣椒");
}
}
public class Test {
public static void main(String[] args) {
CookTemplate drumstick = new Drumstick();
drumstick.stirFryRule();
System.out.println("================>");
CookTemplate barbecue = new Barbecue();
barbecue.stirFryRule();
}
}
//测试结果
加水中
开火!!!
鸡腿加辣椒
起锅
================>
加水中
开火!!!
烧烤加孜然调料
起锅
使用场景
什么场景用到?
- Spring的整个继承体系都基本用到模板方法;
- BeanFactory.getBean(1,2,3,4)—A1—-A2—-A3—-A4(全部被完成)
- JdbcTemplate、RedisTemplate都允许我们再扩展…..
- 我们自己的系统也应该使用模板方法组织类结构 ……