声明:本系列文章内容摘自《iOS设计模式》

中介者模式

用一个对象来封装一系列对象的交互方式。中介者使个对象不需要显式地相互调用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

何时使用中介者模式

1.对象间的交互虽定义明确然而非常复杂,导致椅子对象彼此相互依赖而且难以理解;

2.因为对象引用了许多其他对象并与其通信,导致对象难以复用;

3.想要制定一个分布在多个对象中的逻辑或行为,又不想生成太多子类。

举个例子

有三个视图,我们可能需要两两之间进行跳转,类比于公司内同时每两个人都有可能进行业务上的交流。如果不借助通讯工具的话,公司内的每个人都需要相互认识。如果我们使用tabbarcontroller这一控件,三个是图相互切换就可以通过tabbar这一工具来实现,简化了两两跳转的复杂逻辑。类比于公司同事使用QQ群或者微信群进行业务交流。

简单的代码说明:

目录结构:

三个控制器中没有代码,仅在tabbarcontroller中将它们添加进去。

PatternRootViewController.h

#import <UIKit/UIKit.h>typedef enum
{kButtonTagFirst,kButtonTagSecond,kButtonTagThird
}ButtonTag;@interface PatternRootViewController : UITabBarController+(PatternRootViewController *)sharedInstance;
@end

PatternRootViewController.m

#import "PatternRootViewController.h"
#import "FirstViewController.h"
#import "SecondViewController.h"
#import "ThirdViewController.h"
@interface PatternRootViewController ()@end@implementation PatternRootViewController- (void)viewDidLoad {[super viewDidLoad];self.title = @"中介者模式";FirstViewController *firstVC = [[FirstViewController alloc] init];firstVC.tabBarItem.title = @"页面一";SecondViewController *secondVC = [[SecondViewController alloc] init];secondVC.tabBarItem.title = @"页面二";ThirdViewController *thirdVC = [[ThirdViewController alloc] init];thirdVC.tabBarItem.title = @"页面三";self.viewControllers = @[firstVC,secondVC,thirdVC];
}#pragma mark - 创建实例
+(PatternRootViewController *)sharedInstance
{static PatternRootViewController *sharedCoordinatingController = nil;static dispatch_once_t predicate;dispatch_once(&predicate,^{sharedCoordinatingController = [[self alloc] init];});return sharedCoordinatingController;
}@end

总结

虽然对于处理应用程序的行为分散与不同对象并且对象相互依存的情况,中介者模式非常有用,但是应该注意避免让中介者类过于庞大而难以维护。

转载于:https://www.cnblogs.com/wlsxmhz/p/6109304.html

设计模式(中介者模式-对象去耦)相关推荐

  1. 设计模式-中介者模式(Mediator Pattern)

    设计模式-中介者模式(Mediator Pattern) 文章目录 设计模式-中介者模式(Mediator Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.总 ...

  2. Python设计模式-中介者模式

    Python设计模式-中介者模式 代码基于3.5.2,代码如下; #coding:utf-8 #中介者模式class colleague():mediator = Nonedef __init__(s ...

  3. 7. 星际争霸之php设计模式--中介者模式

    题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...

  4. 设计模式中介者模式-备忘录模式-状态模式

    设计模式 中介者模式 基本介绍 中介者模式使用一个中介对象来封装一系列的对象交互.中介者使各个对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 中介者模式属于行为模式,使 ...

  5. 【设计模式】Java设计模式 - 中介者模式

    Java设计模式 - 中介者模式

  6. [设计模式]中介者模式之Events消息传递实现

    这篇文章比较短,修改自 写给大家看的设计模式之中介者中的例子 中介者模式的定义和目的自不必说, 参考上文即可. 本文针对实现方式做一个补充. 中介者模式增加了一个第三方对象(中介者)来控制两个对象(同 ...

  7. 大话设计模式—中介者模式

    中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护.中介者模式属于行为型模式. ...

  8. C++设计模式-中介者模式

    目录 基本概念 代码与实例 基本概念 中介者模式(Mediator)用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示的相互作用,从而使其耦合松散,而且可以独立的改变他们之间的关系. 下面 ...

  9. 一天一个设计模式---中介者模式

    介绍:用一个中介对象来封装对象的交互,中介者使各对象不需要显示地引用,从而使其耦合松散,而且可以独立地改变他们的交互. 场景:举个生活中的例子,如果我们去租房子,我们会将各个房源的价格留下来,等每次价 ...

最新文章

  1. 现在有N元钱,两块钱一瓶,或者直接给你N瓶酒,两个空瓶换一瓶酒,四个瓶盖换一瓶酒,问你最后可以喝多少瓶?如果能借酒呢?
  2. webstorm 不知道手贱点了什么,有时候会自动删除分号
  3. 初探Golang(2)-常量和命名规范
  4. Spring Boot笔记-validation的使用及统一异常处理
  5. 2013年上半年项目总结
  6. Task类的简单介绍
  7. vi编辑器复制删除常用命令
  8. 【Windows远程桌面】RDP Wrapper 监听器状态为 Not listening [not supported] 的解决方法
  9. IDEA中快速创建jsp页面模板
  10. php李炎辉,李炎恢PHP视频教程第一季资源分享
  11. 百度地图矢量瓦片在线下载
  12. 2021-08-14
  13. Windows7orServer2008安装VM-Tools
  14. 【java模板引擎】-beetl
  15. 解决微信调整字体大小导致页面样式混乱的问题
  16. 形状的度量Measures of Shape
  17. 华为模拟器eNSP防火墙配置vlan实验
  18. 【自学Python:Day3】放假的心该怎么冷静下来学……
  19. oppoa59s计算机功能,OPPO A59s怎么开启OTG功能-OPPO A59s开启OTG功能方法 - 河东软件园...
  20. 【win10操作系统基础】我的电脑 控制面板 win10桌面图标有个箭头如何不显示 去掉win10桌面图标箭头的方法

热门文章

  1. ajax.call失效无请求,移动端ajax请求问题?
  2. mysql超大表处理方式是_第29问:MySQL 的复制心跳说它不想跳了
  3. wps xml转换表格_这功能WPS卖近百元?教你免费将PDF转成Word
  4. 指标实现层级_企业如何构建核心指标系统,实现业务运营效率提升90%?
  5. alexeyab darknet 编译_【目标检测实战】Darknet—yolov3模型训练(VOC数据集)
  6. APP 文档服务器,app服务器
  7. linux设备驱动开发详解源码,linux设备驱动开发详解光盘源码.rar
  8. python3 byte 字面值_bytearray() Python 内置函数
  9. socket io 不使用redis_Redis这么快,线程模型竟然是单线程
  10. python爬虫开发 从入门到实战_python网络爬虫从入门到实战开发