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

定义

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


解决问题

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


使用场景

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


行为型设计模式-中介者模式_第1张图片
网状结构

解决办法

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


行为型设计模式-中介者模式_第2张图片
星型结构

优缺点

优点

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

缺点

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


使用场景

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


场景模拟

群聊


中介者 UML 图

行为型设计模式-中介者模式_第3张图片
中介者 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 

@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] 用户:小明 发送消息:晓丽好


参考博客
源代码地址

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

你可能感兴趣的:(行为型设计模式-中介者模式)