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"依次递增

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

有问题可以给我留言

相关推荐
无尽的沉默14 分钟前
Thymeleaf 表达式
java·开发语言·前端
无尽的沉默16 分钟前
Spring Boot 整合 Thymeleaf 模板引擎
java·前端·spring boot
We་ct22 分钟前
从输入URL到页面显示的完整技术流程
前端·edge·edge浏览器
先做个垃圾出来………39 分钟前
DeepDiff差异语义化特性
服务器·前端
蓝帆傲亦1 小时前
前端常用可视化图表组件大全
前端
CappuccinoRose2 小时前
HTML语法学习文档(九)
前端·学习·架构·html5
NEXT062 小时前
BFC布局
前端·css·面试
菜鸟小芯2 小时前
【GLM-5 陪练式前端新手入门】第四篇:卡片布局 —— 让个人主页内容更有层次
前端·人工智能
Hello.Reader2 小时前
Leptos + Tauri 2 前端配置Trunk + SSG + 移动端热重载一次打通(Leptos 0.6 口径)
前端
岱宗夫up2 小时前
【前端基础】HTML + CSS + JavaScript 进阶(一)
开发语言·前端·javascript·css·html