美文网首页
模板方法模式

模板方法模式

作者: 一毛钱 | 来源:发表于2019-03-31 22:08 被阅读0次

    模版方法模式定义

    使用模板方法模式,可以允许第三方开发者以创建子类或者定义闭包的方式,替换一个算法的某些步骤的具体实现。 当你需要实现一些默认行为,同时又想允许其他开发者对其进行修改时,可以使用此模式。
    第一点:定义一个操作中的算法框架
    第二点:将一些步骤延时到子类实现
    第三点:子类可以不改变算法结构,可以重新定义算法的某些特定步骤

    优点

    在开发允许其他开发者进行扩展和定制框架时,此模式非常实用。

    模版方法模式应用场景

    使用此模式,可以选择性的允许外界在不修改原有类的情况下,修改任意算法中的某些步骤的具体实现。
    注意:模板方法模式,只适用于部分步骤需要保持不变算法,算法中的变化的部分可由调用组件提供,以实现完整的算法并生成相应的结果。
    场景一:多个子类有公有方法,且逻辑基本相同
    场景二:重复、复杂的算法,将核心算法设计为模版方法,其周边细节可以由各个子类实现
    场景三:代码重构

    模版方法模式->角色划分

    两个角色
    角色一:抽象类->作用(定义算法框架结构,将一些特定步骤延时到子类实现)
    角色二:具体模版实现类,不改变算法结构,选择性去实现某些特定步骤。

    模版方法模式-原理案例

    电脑开机过程->开机过程
    1、激活电源(按下电源)
    2、检测硬件
    3、启动系统(加载系统)
    4、登录系统

    模版类:流程统一的(算法框架)
    抽象类:TemplateMethodComputer
    具体类:HuaweiComputer

    案例代码

    //模版类:定义了算法框架结构(设计模式->结构)
    class TemplateMethodComputer: NSObject {
    
        override init() {
            super.init()
        }
        
    //    电脑开机过程->开机过程
    //    1、激活电源(按下电源)
        func powerUp() {
            print("按下电源...")
        }
    //    2、检测硬件
        func checkHardware() {
            print("检测硬件...")
        }
    //    3、启动系统(加载系统)
        func loadOS() {
            print("启动系统...")
        }
    //    4、登录系统
        func login() {
            print("登录系统...")
        }
    //    模版类:流程统一的(算法框架)->开机
        final func startup() {
            //1、激活电源(按下电源)
            powerUp()
            //2、检测硬件
            checkHardware()
            //3、启动系统(加载系统)
            loadOS()
            //4、登录系统
            login()
        }
    //    抽象类:TemplateMethodComputer
    }
    
    //模板模式角色二: 开机修改项华为电脑
    class HuaweiComputer: TemplateMethodComputer {
        
        override func loadOS() {
            print("加载华为系统...")
        }
        
        override func login() {
            print("登录华为系统...")
        }
    }
    
    //外部调用
    let huawei = HuaweiComputer()
    huawei.startup()
    

    Cocoa中使用

    viewController类继承自UIViewController,它在实现中重写了父类的viewDidLoad方法。使用的就是模板方法模式。

    总结

    假设步骤一 + 步骤二固定不变默认实现,只需要实现步骤三 + 步骤四,非常灵活
    地图加载也是如此,你也将某些特定公共功能,抽象为模版类,子类只需要实现具体的功能即可。
    模板方法模式,让苹果可以定义一组固定类,并在其中定义一些默认的行为,第三方开发者可以根据需要对其进行重写。

    相关文章

      网友评论

          本文标题:模板方法模式

          本文链接:https://www.haomeiwen.com/subject/knkpbqtx.html