Swift设计模式之观察者模式

转自

原文

// 观察者模式
// 一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统
// 设计模式分类:行为型模式

/// 观察者接口
protocol PropertyObserver : class {
    /** 属性即将改变监听方法 - parameter propertyName: 属性名 - parameter newPropertyValue: 新的值 */
    func willChangePropertyName(propertyName:String,newPropertyValue:Int)
    /** 属性已经改变监听方法 - parameter propertyName: 属性名 - parameter oldPropertyValue: 原来的值 */
    func didChangePropertyName(propertyName:String,oldPropertyValue:Int)
}

/// 观察对象
class TestChAmbers {

    weak var observer:PropertyObserver?

    var testChAmberNumber: Int = 0 {
        willSet(newValue) {
            observer?.willChangePropertyName("testChAmberNumber",newPropertyValue:newValue)
        }
        didSet {
            observer?.didChangePropertyName("testChAmberNumber",oldPropertyValue:oldValue)
        }
    }
}

/// 具体观察者
class Observer : PropertyObserver {
    func willChangePropertyName(propertyName: String,newPropertyValue: Int) {
        print("\(propertyName)的值将要改变为\(newPropertyValue)")
    }

    func didChangePropertyName(propertyName: String,oldPropertyValue: Int) {
        print("\(propertyName)的值已经改变,原来的值为\(oldPropertyValue)")
    }
}

var observerInstance = Observer()
var testChAmbers = TestChAmbers()
testChAmbers.observer = observerInstance
testChAmbers.testChAmberNumber += 1

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...