- 需求:
- 我们有多种优惠策略
- 不同的优惠策略在计算的价格的时候,有一些通用的基础逻辑
- 每种优惠策略还有一些是自己特殊的价格计算的逻辑
- 这个模式一定要多用用,尤其是对于有多种不同实现的一些场景,比如说,不同的折扣类型,不同的优惠券类型,不同的商品类型,那肯定涉及到不同的处理逻辑。但是可以将他们共同的基础逻辑抽取到父类中,然后将要子类实现的逻辑留空,交给子类去实现。
![image.png](/uploads/projects/xiongsanxiansheng@ptb7u9/bddcffe1e55258a20176cc1381a8445f.png)
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的特殊计算逻辑");
}
}
}