1、直白的对象交互
直接传值和调用。
例如A的信息来自于B,这样限制了实现手段的多样性,维护起来容易,但当A的信息不止是来自于B时,就需要深入了解和修改,存在引发其它问题的风险。
2、轻度抽象的对象间交互
多态:
优点:即使不重载基类方法,也有默认实现。
缺点:响应者只能被一个调度者调用。
接口/协议:
优点:能被多个不同调度者调用。
缺点:无法提供默认实现(swift可以提供),可能需要实现不必要去实现的方法。
3、target-action
借助runtime,无视命名域是否完整(不需针对对象或接口提供声明,只需要有target指针和action描述即可)
但失去了编译器检查,必须不经常变动的业务和代码才适用。
4、响应式的对象间交互
调用者无需知道响应者,工程在较低耦合的情况下完成任务。
但响应者必须知道调用者下达了什么样的指令(NotificationName),同时响应式对象交互方案造成跨层数据传递,不利于数据流的控制。
5、基于闭包的对象间交互
闭包可以抓取上下文,跨越命名域传递,从而使得命名域残缺不全的情况下完成对象间交互成为可能。
限制:发起调用的地方和提供回调的地方必须在同一上下文。
缺点:并不一定希望发起调用和提供回调的地方是同一个地方,或者根本不关心回调。
按以下文章做的笔记:
https://casatwy.com/communication_patterns.html