## **模式的定義**
模板方法模式在一個方法中定義一個算法的骨架,而將一些步驟延遲到子類中.模板方法使得子類可以在不改變算法結構的情況下,重新定義算法中的某些步驟。例如電商中的訂單支付,我們通常會同時用到多個支付渠道(支付寶、微信支付、銀聯支付等),訂單支付又是標準化的模板流程:
```
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();
}
```