Template Method,模板方法:定义一个操作中的算法的骨架,而将一
些步骤延迟到子类中,TemplateMethod使得子类可以不改变一个算法的结构即
可以重定义该算法得某些特定步骤。
举例说明
奶茶制作过程,第一步加牛奶,第二步加糖,第三步加其他配料。第三步对于不同口味的奶茶,可以添加各种配料,那么第三步的方法就可以抽象为一个模板方法,让子类来各自实现。这里给代码。
奶茶基类MilkTea.java
package com.figo.study2024.pattern.template;
/**
* @ClassName:MilkTea
* @PackageName:com.figo.study2024.pattern.template
* @Description:奶茶基类
* @Date:2024/2/20 11:39
* @Author:figo
*/
public abstract class MilkTea {
/**
* 制作奶茶总体流程不变
*/
public void makeMilk()
{
addMilk();
addSuger();
addOther();
}
public void addMilk()
{
System.out.println("第一步添加牛奶");
}
public void addSuger()
{
System.out.println("第二步添加糖");
}
/**
* 添加配料,作为一个模板方法让子类自行实现
*/
public abstract void addOther();
}
珍珠奶茶子类PearlMilkTea.java
package com.figo.study2024.pattern.template;
/**
* @ClassName:PearlMilkTea
* @PackageName:com.figo.study2024.pattern.template
* @Description:珍珠奶茶类描述
* @Date:2024/2/20 12:50
* @Author:figo
*/
public class PearlMilkTea extends MilkTea{
@Override
public void addOther() {
System.out.println("第三步添珍珠");
}
}
红豆奶茶子类RedBeanMilkTea.java
package com.figo.study2024.pattern.template;
/**
* @ClassName:RedBeanMilkTea
* @PackageName:com.figo.study2024.pattern.template
* @Description:红豆奶茶类描述
* @Date:2024/2/20 12:44
* @Author:figo
*/
public class RedBeanMilkTea extends MilkTea{
@Override
public void addOther() {
System.out.println("第三步添红豆");
}
}
客户端调用:
package com.figo.study2024.pattern.template;
/**
* @ClassName:PatterTest
* @PackageName:com.figo.study2024.pattern.template
* @Description:客户端调用类描述
* @Date:2024/2/20 12:53
* @Author:figo
*/
public class PatterTest {
public static void main(String[] args) {
//制作红豆奶茶
MilkTea redBeanMilkTea=new RedBeanMilkTea();
redBeanMilkTea.makeMilk();
//制作珍珠奶茶
MilkTea pearlMilkTea=new PearlMilkTea();
pearlMilkTea.makeMilk();
}
}