🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## **模式的定义** 模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。例如电商中的订单支付,我们通常会同时用到多个支付渠道(支付宝、微信支付、银联支付等),订单支付又是标准化的模板流程: ``` 1. 校验订单是否合法 2. 支付 3. 支付完成后的订单处理 ``` 在这一标准化的模板流程中,步骤1和步骤3是一直保持一致的,而步骤2的实现取决于用户使用哪种支付方式,那么我们就可以把步骤2定义成抽象方法,具体的实现可以交个各自的支付来处理完成。 ## **代码实现** 需求:基于多支付渠道的订单支付 1. 定义标准的支付模板方法,规范支付流程 ``` public abstract class PayTempMethod { // 校验订单 public void voildOrder() { System.out.println("订单校验"); } // 渠道支付,抽象方法,具体的支付逻辑由各自渠道的子类来完成 abstract void payWithChannel(); // 支付完成处理 public void finish() { System.out.println("支付完成订单处理"); } // 执行支付流程 public void execute() { voildOrder(); payWithChannel(); finish(); } } ``` 2. 支付渠道的子类实现 ``` public class AliPay extends PayTempMethod { @Override void payWithChannel() { System.out.println("支付宝支付"); } } public class WechatPay extends PayTempMethod { @Override void payWithChannel() { System.out.println("微信支付"); } } ``` 3. 客户端调用 ``` public static void main(String[] args) { AliPay aliPay = new AliPay(); aliPay.execute(); } ```