设计模式(中介者模式-对象去耦)

声明:本系列文章内容摘自《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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/356451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java flash截图_求大神们帮助, 如何在java中实现文字数据转换成图片或flash显示

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{response.setContentType("image/jpeg");createImage(response.getOutputStream());} private …

Spring Cloud Sidecar –节点初始化

在上一篇博客文章中&#xff0c;我描述了Sidecar应用程序如何用于在Eureka中注册Cassandra节点&#xff0c;并且更普遍地可以用于在Eureka中注册任何非JVM应用程序。 在本文中&#xff0c;我将介绍应用程序如何查询Sidecar注册节点。 发现注册的节点–初始化后 如果在Bean初始…

windows服务器的DDOS防御,

抵御 SYN 攻击 SYN 攻击利用了 TCP/IP 连接建立机制中的安全漏洞。要实施 SYN 洪水攻击&#xff0c;攻击者会使用程序发送大量 TCP SYN 请求来填满服务器上的挂起连接队列。这会禁止其他用户建立网络连接。 要保护网络抵御 SYN 攻击&#xff0c;请按照下面这些通用步骤操作&…

java传.net datetime_.net调java写的webService传过去的datetime,int等非string类型为null的问题...

使用.NET向webService传double、int、DateTime 服务器得到的数据时null的问题 收藏用C#.NET调用Java开发的WebService时&#xff0c;先在客户端封装的带有int属性的对象&#xff0c;当将该对象传到服务器端时&#xff0c;服务器端可以得到string类型的属性值&#xff0c;却不能…

arcengine,深入理解游标Cursors,实现数据的快速查找,插入,删除,更新

风过无痕 原文 arcengine,深入理解游标Cursors&#xff0c;实现数据的快速查找&#xff0c;插入&#xff0c;删除&#xff0c;更新 深入理解游标Cursors&#xff0c;实现数据的快速查找&#xff0c;插入&#xff0c;删除&#xff0c;更新 1、查找数据Search Cursors //by yl …

guice 框架_玩! 框架+ Google Guice

guice 框架在我目前正在工作的项目中&#xff0c;我们开始使用Google Guice。 对于那些不知道的人&#xff0c; Google Guice是一个依赖项注入框架。 依赖项注入的基本思想是提供一个其依赖的类&#xff0c;而不是使依赖类负责实例化它所依赖的对象。 Play具有用于整合Guice的模…

js中,实现对键盘按键的监听:

<script>function keyUp(e) { var currKey0,ee||event; currKeye.keyCode||e.which||e.charCode; var keyName String.fromCharCode(currKey); alert("按键码: " currKey " 字符: " keyName); } document.onkeyup keyUp;</scrip…

java程序运行结果题_2016年关于Java编程与程序运行结果笔试题

2016年关于Java编程与程序运行结果笔试题1.Java编程,打印昨天的当前时刻public class YesterdayCurrent{public void main(String[] args){Calendar cal Calendar.getInstance();cal.add(Calendar.DATE, -1);System.out.println(cal.getTime());}}2.文件读写,实现一个计数器pu…

Hystrix简介– Hello World

在先前的博客文章中&#xff0c;我谈到了需要像Netflix Hystrix这样的库的动机。 在这里&#xff0c;我将跳入一些非常基本的方法来开始使用Hystrix&#xff0c;并在更复杂的用例中进行后续介绍。 你好&#xff0c;世界 以下是“ Hystrix命令”的一个简单的Hello World示例&am…

Unity 继承MonoBehaviour下方法通过鼠标触控与物体交互

要通过鼠标的进入、离开、悬停、拖拽等动作实现与物体的交互时&#xff0c;我们可以使用继承MonoBehaviour的脚本下的与鼠标相关的方法。具体有以下方法&#xff1a; //当鼠标按下时被调用private void OnMouseDown(){Debug.Log("鼠标按下了");}//当鼠标按下并拖动时…

Collection中list集合的应用常见的方法

集合 &#xff1a; 用存放对象的容器(集合) Collection &#xff1a; 跟接口 &#xff1a; 单列集合 ---> List :有序的 &#xff0c;元素是可以重复的。 ---> Set : 无序的 &#xff0c;元素是不可以重复的。 Collectionz红常用的方…

js base64编码 java 解码_JavaScript字符串的Base64编码与解码

有时文本里包含一些不可打印的符号&#xff0c;而你需要把它们传输到服务器&#xff0c;这时我们会需要用到Base64编码。或者你需要把一个图片内容以文本格式嵌入到网页中&#xff0c;这时你也会用到 Base64 编码。所谓 Base64 是一种基于64个可打印字符来表示二进制数据的方法…

linux cmake 安装mysql5.5.11_以及更高版本_linux cmake 安装mysql5.5.11,以及更高版本

1、下载mysql5.5.12和cmakewgethttp://mirrors.sohu.com/mysql/MySQL-5.5/mysql-5.5.12-linux2.6-i686.tar.gzwget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz2、安装cmakemkdir /usr/local/cmake切换到存放cmake-2.8.4.tar.gz到目录tar zxvfcmake-2.8.4.tar.gzcd cm…

iOS中如何监测来电

http://blog.csdn.net/liujinlongxa/article/details/44207587转载于:https://www.cnblogs.com/it-k-50/p/6122844.html

maven 构建依赖树_Maven构建依赖项

maven 构建依赖树熟悉发行版和快照依赖关系的Maven和Gradle用户可能不了解TeamCity快照依赖关系&#xff0c;或者假定他们与Maven相关&#xff08;这是不正确的&#xff09;。 熟悉工件和快照相关性的TeamCity用户可能不知道&#xff0c;除了TeamCity提供的功能之外&#xff0c…

ssh图片上传 java_ssh上传并显示图片

struts部分&#xff1a;attribute"upfileForm"input"/upload/uploadfile.jsp"name"upfileForm"path"/upfile"scope"request"validate"true"type"com.yourcompany.struts.action.UpfileAction">publi…

安卓手机移动端页面为body设置overflow:hidden;不起作用

动态的改变body的样式&#xff0c;测试了可行 var scrollTop $("body").scrollTop();//body设置为fixed之后会飘到顶部&#xff0c;所以要动态计算当前用户所在高度 $("body").css({overflow:hidden,position: fixed,top: scrollTop*-1 }); $loadMask.css…

责任链设计模式示例

本文是我们名为“ Java设计模式 ”的学院课程的一部分。 在本课程中&#xff0c;您将深入研究大量的设计模式&#xff0c;并了解如何在Java中实现和利用它们。 您将了解模式如此重要的原因&#xff0c;并了解何时以及如何应用模式中的每一个。 在这里查看 &#xff01; 目录 …

HDU 5944 Fxx and string(暴力/枚举)

传送门 Fxx and string Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 1007 Accepted Submission(s): 422 Description Problem DescriptionYoung theoretical computer scientist Fxx get a string which co…

经典的java程序_Java经典程序

}}}-----------------结果&#xff1a;ABDCBDCB-----------------2.写出程序运行结果import java.lang.StringBuffer;public class Test2{public static void stringReplace(String str){str str.replace(j,i);}public static void bufferReplace(StringBuffer sbf){sbf sbf.…