23種設計模式之模板方法

模板方法屬於行爲型設計模式,在父類中定義處理流程的框架,在子類中實現具體的處理java

推薦訪問個人我的網站,排版更好看呦:
https://chenmingyu.top/design-template-method/算法

什麼是模板方法

在父類(抽象類)中定義好算法的流程,提供抽象方法,針對不一樣的實現交由不一樣的子類去實現,經過這種方式將公共代碼提取出來封裝在父類中,而後父類去控制行爲,子類負責實現,這樣當有不少子類的時候,若是要修改算法,只須要在父類中更改算法的行爲便可。設計模式

實現

已支付爲例,涉及AbstractPay,BankCardPay,WeChatPay三個類。微信

AbstractPay

抽象類(父類),定義了三個抽象方法和一個控制支付流程的方法,也就是模板方法,這個方法使用final修飾,防止被重寫框架

/**
 * @auther: chenmingyu
 * @date: 2019/2/13 16:58
 * @description: 抽象類,定義支付流程
 */
public abstract class AbstractPay {

    /**
     * 獲取支付信息
     */
    abstract String getPayInfo();

    /**
     * 執行支付
     */
    abstract void executePay();

    /**
     * 支付反饋信息
     */
    abstract void payMessage();

    /**
     * 支付
     */
    public final void pay(){
        String info = getPayInfo();
        System.out.println("支付帳戶:"+info);
        executePay();
        payMessage();
    }
}
BankCardPay

子類實現,提供銀行卡支付,繼承AbstractPay類重寫三個抽象方法,提供銀行卡支付的實現ide

/**
 * @auther: chenmingyu
 * @date: 2019/2/13 17:18
 * @description: 銀行卡支付
 */
public class BankCardPay extends AbstractPay{

    @Override
    String getPayInfo() {
        return "個人銀行卡信息";
    }

    @Override
    void executePay() {
        System.out.println("銀行卡支付了");
    }

    @Override
    void payMessage() {
        System.out.println("銀行卡方式支付,發短息");
    }
}
WeChatPay

子類實現,提供微信支付,繼承AbstractPay類重寫三個抽象方法,提供微信支付的實現測試

/**
 * @auther: chenmingyu
 * @date: 2019/2/13 17:20
 * @description: 微信支付
 */
public class WeChatPay extends AbstractPay{

    @Override
    String getPayInfo() {
        return "個人微信支付信息";
    }

    @Override
    void executePay() {
        System.out.println("微信支付了");
    }

    @Override
    void payMessage() {
        System.out.println("微信方式支付,微信內發服務通知");
    }
}
測試
public static void main(String[] args) {
    BankCardPay bankCardPay = new BankCardPay();
    bankCardPay.pay();
    System.out.println("... 分割線 ...");
    WeChatPay weChatPay = new WeChatPay();
    weChatPay.pay();
}

輸出微信支付

支付帳戶:個人銀行卡信息
銀行卡支付了
銀行卡方式支付,發短息
... 分割線 ...
支付帳戶:個人微信支付信息
微信支付了
微信方式支付,微信內發服務通知

總結一下,就是抽象類封裝了一個final類型的方法,方法中調用其餘的抽象方法,制定業務流程,提供的抽象方法交由子類去實現。當你有多個子類實現邏輯相同時,建議使用模板方法。網站

相關文章
相關標籤/搜索