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

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

总结

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

时间: 2024-08-03 22:14:21

设计模式(中介者模式-对象去耦)的相关文章

【C#设计模式-中介者模式】

一.概述:中介者模式,定义了一个中介对象来封装一系列对象之间的交互关系.中介者使各个对象之间不需要显式地相互引用,从而使耦合性降低,而且可以独立地改变它们之间的交互行为. 二.例子:QQ游戏平台,聊天室.QQ群和短信平台,这些都是中介者模式在现实生活中的应用. 三.结构: 者模式设计两个具体对象,一个是用户类,另一个是中介者类,根据针对接口编程原则,则需要把这两类角色进行抽象,所以中介者模式中就有了4类角色,它们分别是:抽象中介者角色,具体中介者角色.抽象同事类和具体同事类.中介者类是起到协调各

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

题记==============================================================================本php设计模式专辑来源于博客(jymoz.com),现在已经访问不了了,这一系列文章是我找了很久才找到完整的,感谢作者jymoz的辛苦付出哦! 本文地址:http://www.cnblogs.com/davidhhuan/p/4248183.html============================================

对象去耦的方法之二:中介者模式

中介者模式定义了一个对象,该对象封装了一组对象是如何交互的.这种模式被认为是一个行为模式,因为它可以改变程序的运行行为.它解决了类与类之间趋于复杂的依赖关系.当功能种出现了多对多的复杂对象群时就可以使用中介者模式.将一定的复杂度移到了Mediator中,所以Mediator类的功能维护需要谨慎处理. 中介者模式一个重要的应用就是,通过设置路由器来管理VC之间的跳转关系. 如何实现: 思想:实现一个管理VC的功能类,这个类的作用是给每个VC绑定一个URL.当需要打开某个新的VC时,可以通过功能类的

Objective-C设计模式——中介者Mediator(对象去耦)

中介者模式 中介者模式很好的诠释了迪米特法则,任意两个不相关的对象之间如果需要关联,那么需要通过第三个类来进行.中介者就是把一组对象进行封装,屏蔽了类之间的交互细节,使不同的类直接不需要持有对方引用也可以进行访问. 中介者Mediator会持有同事类(就是需要处理交互逻辑的对象)Colleague的引用,同时每个colleague也会持有Mediator一份引用.这样colleague如果有任何和别的类交互的请求就会发给Mediator,对改组对象进行了解耦合.其实我们平时经常写的视图控制器本身

[设计模式]中介者模式

1. 定义 用一个中介者对象来封装了一个系列对象的交互,中介者使得各个对象可以不需要显式的引用,而且可以独立改变对象之间的交互. 中介者模式思路很简单,中介者模式中通过引入一个中介者对象,让其他对象与中介者对象进行交互,而中介者对象知道如何和所有对象交互,这样对象之间的交互关系就没有了,从而实现对象之间解耦. 每个同事对象发生了变化,不需要知道这样会引起其他对象什么变化,只需要通知中介者,由中介者去与其他对象交互.这样的松耦合带来的好处是,同事对象之间的交互关系减少,而且有利于功能的修改和扩展.

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

中介者模式(Mediator Pattern)是用来减少多个对象和类之间的通信复杂性. 这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合.使代码易于维护. 中介者模式属于行为型模式. 引言: 虽然一个系统切割成很多对象通常能够添加其可复用性.可是对象间相互连接次数的添加又会减少其可复用性:大量的连接使得一个对象不可能在没有其它对象的支持下工作.系统表现为一个不可切割的总体,所以,对系统的行为进行不论什么较大的修改就十分困难了. 要解决这种问题.我们能够使用 迪米特原则 ,假设

24种设计模式--中介者模式【Mediator Pattern】

各位好,大家都是来自五湖四海,都要生存,于是都找了个靠山——公司,给你发薪水的地方,那公司就要想尽办法盈利赚钱,盈利方法则不尽相同,但是作为公司都有相同三个环节:采购.销售和库存,这个怎么说呢?比如一个软件公司,要开发软件,需要开发环境吧, Windows 操作系统,数据库产品等,这你得买吧,那就是采购,开发完毕一个产品还要把产品推销出去,推销出去了大家才有钱赚,不推销出去大家都去喝西北风呀,既然有产品就必然有库存,软件产品也有库存,你总要拷贝吧,虽然是不需要占用库房空间,那也是要占用光盘或硬盘

PHP设计模式——中介者模式

声明:本系列博客参考资料<大话设计模式>,作者程杰. 中介者模式用一个中介者对象来封装一系列的对象交互.中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互. UML类图: 角色: 中介者接口(UnitedNations):在里面定义了各个同事之间相互交互所需要的方法. 具体的中介者实现对象(UnitedCommit):它需要了解并为维护每个同事对象,并负责具体的协调各个同事对象的交互关系. 同事类的定义(Country):通常实现成为抽象类,主要负责约束同

C#设计模式-中介者模式

在现实生活中,有很多中介者模式的身影,例如QQ游戏平台,聊天室.QQ群和短信平台,这些都是中介者模式在现实生活中的应用,下面就具体分享下我对中介者模式的理解. 一. 中介者(Mediator)模式 从生活中的例子可以看出,不论是QQ游戏还是QQ群,它们都是充当一个中间平台,QQ用户可以登录这个中间平台与其他QQ用户进行交流,如果没有这些中间平台,我们如果想与朋友进行聊天的话,可能就需要当面才可以了.电话.短信也同样是一个中间平台,有了这个中间平台,每个用户都不要直接依赖与其他用户,只需要依赖这个