Mediator (中间件、解耦神器、组件化、设计模式)

Mediator用过的朋友都知道它的优缺点,这篇文章我们来解决它存在的缺点 首先,我们列举一下mediator存在的缺点: 1.每新增一个模块,就要补充一个Category 2.模块A 想要调用 模块B,模块B需要暴漏需要调用的方法 3.参数硬编码问题 4.命名规则并不美观且相对复杂,每个Target都得加Target_A,每个Action都得加Action_ 5.编译时候没有类型检查,运行的时候才能发现问题

这里我们提供NSObject+Mediator,解决上面的部分问题: 可以点击查看demo

demo演示一个常用场景:tableView列表,我们希望通过传参viewController、Cell、数据源data来封装一个通用功能

[NSObject performTarget:<target>.classString action:<action> object:<cell> object:<viewController>]; 这个方法封装类(TableViewDemo)作为target,action方法也不需要暴漏出来,这个方法主要用来传参并返回对象

[obj performAction:<action> object:data]; 刷新tableView数据源调用该方法

以上就是核心代码,完美解决1、2、4问题,但是硬编码问题似乎更严重了,这里的target和action都使用字符串,目前的解决思路是字符串映射+消息转发(resolveClassMethod)去解决参考demo 最后的类型检查是硬伤,毕竟Mediator的核心就是运行时。

此外说明一下:NSObject+Mediator如何使用

NSObject+Mediator可以调用绝大数方法:

比如我们要初始化一个label UILabel *label = [UILabel performAction:@"new"]

比如自定义的类 CustomLabel继承UILabel,UILabel *label = [NSObject performTarget:@"CustomLabel".classString action:@"new"]

其中字符串方法classString是用来区分实例方法和类方法的; objects是参数大于2个时,使用字典参数,key从@"1"依次递增

给一个关注支持一下,谢谢

有问题可以给我留言

相关推荐
木木黄木木1 小时前
html5炫酷3D文字效果项目开发实践
前端·3d·html5
Li_Ning212 小时前
【接口重复请求】axios通过AbortController解决页面切换过快,接口重复请求问题
前端
胡八一3 小时前
Window调试 ios 的 Safari 浏览器
前端·ios·safari
Dontla3 小时前
前端页面鼠标移动监控(鼠标运动、鼠标监控)鼠标节流处理、throttle、限制触发频率(setTimeout、clearInterval)
前端·javascript
再学一点就睡3 小时前
深拷贝与浅拷贝:代码世界里的永恒与瞬间
前端·javascript
CrimsonHu3 小时前
B站首页的 Banner 这么好看,我用原生 JS + 三大框架统统给你复刻一遍!
前端·javascript·css
Enti7c3 小时前
前端表单输入框验证
前端·javascript·jquery
拉不动的猪3 小时前
几种比较实用的指令举例
前端·javascript·面试
麻芝汤圆3 小时前
MapReduce 的广泛应用:从数据处理到智能决策
java·开发语言·前端·hadoop·后端·servlet·mapreduce
与妖为邻4 小时前
自动获取屏幕尺寸信息的html文件
前端·javascript·html