美文网首页设计模式之ios实现
行为型设计模式-中介者模式

行为型设计模式-中介者模式

作者: 充满活力的早晨 | 来源:发表于2018-04-11 10:11 被阅读4次

    定义

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


    解决问题

    对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。


    使用场景

    多个类相互耦合,形成了网状结构。


    网状结构

    解决办法

    将上述网状结构分离为星型结构。


    星型结构

    优缺点

    优点

    1、降低了类的复杂度,将一对多转化成了一对一。
    2、各个类之间的解耦。
    3、符合迪米特原则。

    缺点

    中介者会庞大,变得复杂难以维护。


    使用场景

    1、系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
    2、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。


    场景模拟

    群聊


    中介者 UML 图

    中介者 UML 图

    简单代码

    #import "User.h"
    @interface ChatRoom : NSObject
    +(void)showMessage:(User*)user Message:(NSString*)message;
    @end
    
    
    #import "ChatRoom.h"
    
    @implementation ChatRoom
    +(void)showMessage:(User*)user Message:(NSString*)message{
        NSLog(@"用户:%@ 发送消息:%@",user.name,message);
    }
    @end
    
    
    #import <Foundation/Foundation.h>
    
    @interface User : NSObject
    @property (nonatomic,strong) NSString * name;
    -(void)sendMessage:(NSString *)message;
    @end
    
    
    #import "User.h"
    #import "ChatRoom.h"
    @implementation User
    -(void)sendMessage:(NSString *)message{
        [ChatRoom showMessage:self Message:message];
    }
    @end
    
    

    测试代码

      User * userLI = [User new];
        userLI.name = @"晓丽";
        User * userMing = [User new];
        userMing.name=@"小明";
        [userLI sendMessage:@"小明好"];
        [userMing sendMessage:@"晓丽好"];
        
    

    测试结果

    2018-04-11 09:49:33.564922+0800 行为型设计模式-中介者模式[62496:8507584] 用户:晓丽 发送消息:小明好
    2018-04-11 09:49:33.565092+0800 行为型设计模式-中介者模式[62496:8507584] 用户:小明 发送消息:晓丽好
    
    

    参考博客
    源代码地址

    下一篇博客
    行为型设计模式-备忘录模式

    相关文章

      网友评论

        本文标题:行为型设计模式-中介者模式

        本文链接:https://www.haomeiwen.com/subject/otwnhftx.html