描述
在模板模式(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{@Overridepublic void addSeasoning() {System.out.println("烧烤加孜然调料");}}
public class Drumstick extends CookTemplate{@Overridepublic 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都允许我们再扩展…..
- 我们自己的系统也应该使用模板方法组织类结构 ……
