13.Template - QDDCoder/LZLearniOS GitHub Wiki

模板模式

 模板模式Template Pattern一个抽象类公开定义了执行它的方法的方式/模板它的子类可以按需要重写方法实现但调用将以抽象类中定义的方式进行这种类型的设计模式属于行为型模式定义一个操作中的算法的骨架而将一些步骤延迟到子类中模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤解决:一些方法通用却在每一个子类都重新写了这一方法如何解决将这些通用算法抽象出来关键代码在抽象类实现其他步骤在子类实现它的模板方法被设置为 final

创建模板类

//它的模板方法被设置为 final。
class Game:NSObject{
    
    override init() {
        super.init()
    }
    
    // 必须实现
    func initialize(){
        fatalError("Must Override")
    }
    func startPlay(){
        fatalError("Must Override")
    }
    func endPlay(){
        fatalError("Must Override")
    }
    
    final func play()  {
        //初始化游戏
        initialize()
 
        //开始游戏
        startPlay()
 
        //结束游戏
        endPlay()
    }
}

子类

//子类Cricket
class Cricket: Game {
    
    override func endPlay() {
        print("Cricket Game 结束!")
    }
    
    override func initialize() {
        print("Cricket Game初始化")
    }
    
    override func startPlay() {
        print("Cricket Game开始")
    }
}

//子类Football
class Football: Game {
    override func endPlay() {
        print("Football Game 结束!")
    }
    
    override func initialize() {
        print("Football Game初始化")
    }
    
    override func startPlay() {
        print("Football Game开始")
    }
}
  • 测试

var game:Game = Cricket()
game.play()

game = Football()
game.play()
  • 测试结果

Cricket Game初始化
Cricket Game开始
Cricket Game 结束!
Football Game初始化
Football Game开始
Football Game 结束!
⚠️ **GitHub.com Fallback** ⚠️