模板方法模式-定义
1.定义一个操作中的算法框架
2.将一些步骤延时到子类实现
3.子类可以不改变算法结构,可以重新定义算法的某些特定步骤
模板方法特点
1.(原则->太监方法)不允许被继承和重写
- 算法结构固定,不允许修改
- 执行流程不可以重写,执行细节可以重写 swift里执行流程会加final关键字,不允许重写
模板方法模式应用场景
场景一:多个子类有公有方法,且逻辑基本相同
场景二:重复复杂的算法,将核心算法设计成为模板方法,其周边细节可以由各个子类实现
场景三:代码重构
区别:和策略模式相比,模板方法针对算法框架结构,策略模式针对具体算法
模板方法模式角色划分
角色一: 抽象类->作用(定义算法框架结构,将一些特定的步骤延时到子类实现)
角色二:具体模板实现类,不改变算法结构,选择性实现某些特定步骤
模板方法原理案例
//
// TemplateMethodComputer.swift
// Andy_20190306_TemplateMethod
//
// Created by 王宁 on 2019/3/6.
// Copyright © 2019年 王宁. All rights reserved.
//
import UIKit
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()
}
}
//
// HuaWei.swift
// Andy_20190306_TemplateMethod
//
// Created by 王宁 on 2019/3/7.
// Copyright © 2019年 王宁. All rights reserved.
//
import UIKit
//2.将一些步骤延时到子类实现
//3.子类可以不改变算法结构,可以重新定义算法的某些特定步骤
class HuaWei: TemplateMethodComputer {
override func checkHardware() {
print("华为检测硬件...")
}
// 3、启动系统(加载系统)
override func loadOS() {
print("华为启动系统...")
}
}
//
// ViewController.swift
// Andy_20190306_TemplateMethod
//
// Created by 王宁 on 2019/3/6.
// Copyright © 2019年 王宁. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let huawei=HuaWei()
huawei.startup()
// Do any additional setup after loading the view, typically from a nib.
}
}
返回结果
按下电源...
华为检测硬件...
华为启动系统...
登录系统...
模板方法实际用到举例:模板方法的核心(执行流程固定有了顺序,只需实现模板方法即可,不需要关心内部流程细节(顺序))
1.下拉刷新组件:加载流程固定
2.viewcontroller:生命周期固定
3.uiview:生命周期固定
网友评论