Swift设计模式----模板方法模式

模板方法模式:在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。
现在有个订单要处理,我们定义超类:

class OrderProcess: NSObject {

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

超类里定义了处理订单的步骤,生成订单,支付订单,结果回调,我们生成订单的方式是一样的,但是支付方式和结果回调却可能不同,比如微信支付、支付宝支付。
现在我们搞个微信支付的订单处理:

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

然后再搞个支付宝支付的方法:

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

这样客户端可以选择不同的支付方式来处理订单,复用了订单生产的逻辑:

        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的订单
正在调起支付宝支付order.....
支付宝支付成功
正在生成商品:100的订单
正在调起微信支付order.....
微信支付成功

当然,这里只是演示模板方法模式,在实际应用中,订单生产在前,支付方式选择在后,肯定会在订单处理类里有个支付方式的属性,使用组合模式来处理。
模板方法模式注重通用方法和详细步骤的现实,公用部分逻辑,然后子类去实现不同详细步骤,这样如果想要替换掉一些步骤,就可以再创建一个子类去实现,不用修改原来的类。

比如高德地图里,路径规划时,首先接收两个地点,分别计算出经纬度,然后才会根据不同的出行方式,选择不同的路径实现步骤,就可以用模板方法模式来实现。

你可能感兴趣的:(Swift设计模式----模板方法模式)