Swift設(shè)計(jì)模式----模板方法模式

模板方法模式:在超類(lèi)中定義了一個(gè)算法的框架, 允許子類(lèi)在不修改結(jié)構(gòu)的情況下重寫(xiě)算法的特定步驟。
現(xiàn)在有個(gè)訂單要處理,我們定義超類(lèi):

class OrderProcess: NSObject {

    func createOrder(productId: Int) -> String {
        print("正在生成商品:\(productId)的訂單")
        return "order....."
    }
    
    func pay(orderId: String) -> Bool {
        return false
    }
    
    func resultBack(){
        
    }
}

超類(lèi)里定義了處理訂單的步驟,生成訂單,支付訂單,結(jié)果回調(diào),我們生成訂單的方式是一樣的,但是支付方式和結(jié)果回調(diào)卻可能不同,比如微信支付、支付寶支付。
現(xiàn)在我們搞個(gè)微信支付的訂單處理:

class WeixinOrderProcess: OrderProcess {
    override func pay(orderId: String) -> Bool {
        print("正在調(diào)起微信支付\(orderId)")
        return true
    }
    
    override func resultBack() {
        print("微信支付成功")
    }
}

然后再搞個(gè)支付寶支付的方法:

class AliOrderProcess: OrderProcess {
    override func pay(orderId: String) -> Bool {
        print("正在調(diào)起支付寶支付\(orderId)")
        return true
    }
    
    override func resultBack() {
        print("支付寶支付成功")
    }
}

這樣客戶端可以選擇不同的支付方式來(lái)處理訂單,復(fù)用了訂單生產(chǎn)的邏輯:

        let ali = AliOrderProcess()
        let aliorderId = ali.createOrder(productId: 100)
        ali.pay(orderId: aliorderId)
        ali.resultBack()
        
        let weixin = WeixinOrderProcess()
        let weixinorderId = weixin.createOrder(productId: 100)
        weixin.pay(orderId: weixinorderId)
        weixin.resultBack()
正在生成商品:100的訂單
正在調(diào)起支付寶支付order.....
支付寶支付成功
正在生成商品:100的訂單
正在調(diào)起微信支付order.....
微信支付成功

當(dāng)然,這里只是演示模板方法模式,在實(shí)際應(yīng)用中,訂單生產(chǎn)在前,支付方式選擇在后,肯定會(huì)在訂單處理類(lèi)里有個(gè)支付方式的屬性,使用組合模式來(lái)處理。
模板方法模式注重通用方法和詳細(xì)步驟的現(xiàn)實(shí),公用部分邏輯,然后子類(lèi)去實(shí)現(xiàn)不同詳細(xì)步驟,這樣如果想要替換掉一些步驟,就可以再創(chuàng)建一個(gè)子類(lèi)去實(shí)現(xiàn),不用修改原來(lái)的類(lèi)。

比如高德地圖里,路徑規(guī)劃時(shí),首先接收兩個(gè)地點(diǎn),分別計(jì)算出經(jīng)緯度,然后才會(huì)根據(jù)不同的出行方式,選擇不同的路徑實(shí)現(xiàn)步驟,就可以用模板方法模式來(lái)實(shí)現(xiàn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容