• 设计模式之 delegate 委托模式:Swift 实现


    Delegate Mode 委托模式:

    类 A 中实现具体功能的方法移动到 B 中,B 为受委托对象,B 中的方法都是需要输入一个 A 的引用,从而才能让 B 替 A 做一些具体且复杂的操作。相当于 A 把复杂的操作委派给 B 来完成。

    委托模式
    game 拥有一个 GameDelegation . 接着输入 Game 实例到 Delegation 的实例,这个委派者可以做一些本来应该由 Game 的实例来完成的细节的事情。这样的模式称为委派模式。

    委托模式与代理模式区别在于,代理模式更为严格,代理者和被代理者都共同遵守同一“已声明方法”的顶层协议;而委托模式则不需要。

    // Delegation
    protocol Delegation {
        func gameDidStart(_ game: Game)
        func game(_ game: Game)
        func gameDidEnd(_ game: Game)
    }
    
    // Game
    protocol Game {
        var delegation: Delegation? { get set }
        func play()
    }
    // Concrete Deleagtion
    class SnakeTracker: Delegation {
        func gameDidStart(_ game: Game) {
        }
        
        func game(_ game: Game) {
            // do something
        }
        func gameDidEnd(_ game: Game) {
        }
    }
    
    // Concrete Game
    class SnakeGame: Game {
        var delegation: Delegation?
        init(_ delegation: Delegation) {
            self.delegation = delegation
        }
        func play() {
            delegation!.gameDidStart(self)
            delegation!.game(self)
            delegation!.gameDidEnd(self)
        }
    }
    let gameTracker = SnakeTracker()
    let game = SnakeGame(gameTracker)
    game.play()  // It's the func of the game, but the detail work is done by the delegation.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    iOS 的 UIKit 中代理模式很常见,比如要使用 UITableView,那么让当前的 controller 遵守 UITableViewDatasource 协议和 UITableViewDelegate 协议,即可让当前的 controller 作为一个代理者的身份来设定对应方法的要如何执行设定如何响应来自界面的操作等。

  • 相关阅读:
    零信任实施过程中需要考虑哪些因素
    session会话跟踪技术--尚硅谷(27、28)
    掌握.NET基础知识(一)
    《windows 程序设计》读书笔记 一
    error:03000086:digital envelope routines::initialization error
    Tomcat7+ Weak Password && Backend Getshell Vulnerability
    Go 使用mencached缓存
    Kotlin - 协程构建器 CoroutineBuilder
    docker 跨平台构建镜像
    3D MINS 多模态影像导航系统
  • 原文地址:https://blog.csdn.net/weixin_39147809/article/details/127462653