- 需求:
- 我们有多种优惠策略
- 不同的优惠策略在计算的价格的时候,有一些通用的基础逻辑
- 每种优惠策略还有一些是自己特殊的价格计算的逻辑
- 这个模式一定要多用用,尤其是对于有多种不同实现的一些场景,比如说,不同的折扣类型,不同的优惠券类型,不同的商品类型,那肯定涉及到不同的处理逻辑。但是可以将他们共同的基础逻辑抽取到父类中,然后将要子类实现的逻辑留空,交给子类去实现。

package com.example.designpattern.template;public class TemplateMethodPatternDemo { public static void main(String[] args) { DiscountCalculator calculator1 = new DiscountCalculator1(); calculator1.calculate(); DiscountCalculator calculator2 = new DiscountCalculator2(); calculator2.calculate(); DiscountCalculator calculator3 = new DiscountCalculator3(); calculator3.calculate(); } public interface DiscountCalculator { void calculate(); } /** * 模板方法实现的精华所在 */ public static abstract class AbstractDiscountCalculator implements DiscountCalculator { public void calculate(){ // 完成通用计算逻辑 commonCalculate(); // 完成特殊的计算逻辑 specificCalculate(); } private void commonCalculate(){ System.out.println("通用计算逻辑..."); } protected abstract void specificCalculate(); } public static class DiscountCalculator1 extends AbstractDiscountCalculator { protected void specificCalculate() { System.out.println("优惠计算器1的特殊计算逻辑"); } } public static class DiscountCalculator2 extends AbstractDiscountCalculator { protected void specificCalculate() { System.out.println("优惠计算器2的特殊计算逻辑"); } } public static class DiscountCalculator3 extends AbstractDiscountCalculator { protected void specificCalculate() { System.out.println("优惠计算器3的特殊计算逻辑"); } }}