一个模型如何通知另一个模型特定 属性 发生了变化?

How one model can notify another model for specific property has changed?

Context,一个使用 UIKit 和 MVC 的 iOS 应用程序。

模型 A 有一个单例对象,其 属性 值之一(在本例中为 foo)可以在运行时更改。 模型 B 有一个 属性,模型 C,使用模型 A 的 属性 值初始化。

class ModelA {
    private(set) var foo: CustomObjectClassName

    static let shared = ModelA()
}

class ModelB {
    private var bar: ModelC

    init() {
        self.bar = ModelC(ModelA.shared.foo)
    }

    // TODO: Observer `foo` value change in Model A and then
    // reinit ModelC to replace the old `bar` object
}

应该使用什么通用设计模式或机制让模型 B 了解模型 A 中的 属性 更改并重新初始化它自己的 属性?

我找到了两个可以使用的模式;然而,我对它们的了解越多,它们似乎是为模型和控制器之间的通信而设计的。

相关信息

感谢 El Tomato 的评论,委托可以作为一种模式使用。

委托模式会起作用,因为在我的例子中,模型 A 仅由单个实体模型 B 使用。

protocol ModelADelegate {
    func fooDidChange() -> Void
}

class ModelA {
    public var delegate: ModelADelegate?

    private(set) var foo: CustomObjectClassName {
        didSet {
            delegate.fooDidChange()
        }
    }
   
    static let shared = ModelA()
}

class ModelB, ModelADelegate {
    private var bar: ModelC

    init() {
        ModelA.shared.delegate = self

        self.bar = ModelC(ModelA.shared.foo)
    }

    func fooDidChange() {
        self.bar = ModelC(ModelA.shared.foo)    
    }
}