## **模式的定义**
模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。例如电商中的订单支付,我们通常会同时用到多个支付渠道(支付宝、微信支付、银联支付等),订单支付又是标准化的模板流程:
```
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();
}
```