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{@Overridepublic 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{@Overridepublic 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();}
}