开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 21 天,点击查看活动详情
觉得对你有益的小伙伴记得点个赞+关注
后续完整内容持续更新中
希望一起交流的欢迎发邮件至javalyhn@163.com
1. 模板方法的定义
在模板模式中,一个抽象类公开定义了执行它的方法的方式模板。它的子类可以按需要重写方法实现
,但调用将以抽象类中定义的方式进行。
2. 模板方法中的角色
- 抽象类/抽象模板(Abstract Class)
- 具体子类/具体实现(Concrete Class)
3. 模板方法使用场景
- Spring的整个继承体系都基本用到模板方法
- BeanFactory.getBean(1,2,3,4)--A1---A2---A3---A4(全部被完成)
- JdbcTemplate、RedisTemplate都允许我们再扩展.....
- 我们自己的系统也应该使用模板方法组织类结构
4. 模板方法的实现
CookTemplate
/**
* 1、定义模板
*/
public abstract class CookTemplate {
/**
* 定义算法: 定义好了模板
* 父类可以实现某些步骤
* 留关键给子类
*/
public void cook(){
//定义算法步骤
heating(); //v
addfood();
addsalt();
stirfry(); //v
end(); //v
}
//加热方法
public void heating(){
System.out.println("开火...");
};
//添加食物
public abstract void addfood();
//加盐
public abstract void addsalt();
//翻炒
public void stirfry(){
System.out.println("翻炒中...");
};
//出锅
public void end(){
System.out.println("出锅....");
};
}
AutoCookMachine
public class AutoCookMachine extends CookTemplate{
@Override
public void addfood() {
System.out.println("放了三个小白菜");
}
@Override
public void addsalt() {
System.out.println("放了三勺盐");
}
}
MainTest
public class MainTest {
public static void main(String[] args) {
AutoCookMachine cookMachine = new AutoCookMachine();
cookMachine.cook();
}
}