component3.png
只有调用其他组件接口时才需要依赖 Mediator,组件开发者不需要知道 Mediator 的存在。
参数类型和个数无限制,由 Mediator 去转就行了,组件提供的还是一个 NSDictionary 参数的接口,但在Mediator 里可以提供任意类型和个数的参数。
Mediator可以做统一处理,调用某个组件方法时如果某个组件不存在,可以做相应操作,让调用者与组件间没有耦合。
基本上能解决我们的问题:各组件互不依赖,组件间调用只依赖中间件Mediator,Mediator不依赖其他组件。接下来就是优化这套写法,有两个优化点:
- Mediator 每一个方法里都要写 runtime 方法,格式是确定的,这是可以抽取出来的。
- 每个组件对外方法都要在 Mediator 写一遍,组件一多 Mediator 类的长度是恐怖的。
target-action 对应第一点,target就是class,action就是selector,通过一些规则简化动态调用。
Category 对应第二点,每个组件写一个 Mediator 的 Category,让 Mediator 不至于太长。