资源

完全参照 解释器模式|菜鸟教程但不包括IOS代码

中介者模式

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

介绍

意图: 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
主要解决: 对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。
何时使用: 多个类相互耦合,形成了网状结构。
如何解决: 将上述网状结构分离为星型结构。
关键代码: 对象 Colleague 之间的通信封装到一个类中单独处理。
应用实例:
1、中国加入 WTO 之前是各个国家相互贸易,结构复杂,现在是各个国家通过 WTO 来互相贸易。
2、机场调度系统。
3、MVC 框架,其中C(控制器)就是 M(模型)和 V(视图)的中介者。
优点:
1、降低了类的复杂度,将一对多转化成了一对一。
2、各个类之间的解耦。
3、符合迪米特原则。

缺点: 中介者会庞大,变得复杂难以维护。
使用场景:
1、系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
2、想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

注意事项: 不应当在职责混乱的时候使用。

Android

ChatRoom.java

import java.util.Date;public class ChatRoom {public static void showMessage(User user, String message){System.out.println(new Date().toString()+ " [" + user.getName() +"] : " + message);}
}

User.java

public class User {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public User(String name){this.name  = name;}public void sendMessage(String message){ChatRoom.showMessage(this,message);}
}

MediatorPatternDemo.java

public class MediatorPatternDemo {public static void main(String[] args) {User robert = new User("Robert");User john = new User("John");robert.sendMessage("Hi! John!");john.sendMessage("Hello! Robert!");}
}

结果

Thu Jan 31 16:05:46 IST 2013 [Robert] : Hi! John!
Thu Jan 31 16:05:46 IST 2013 [John] : Hello! Robert!

IOS

ChatRoom.h

#import <Foundation/Foundation.h>
@class User;@interface ChatRoom : NSObject
+(void)showMessage:(NSString*)message user:(User*)user;
@end

ChatRoom.m

#import "ChatRoom.h"
#import "User.h"@implementation ChatRoom
+ (void)showMessage:(NSString *)message user:(User *)user{NSLog(@"%@ [%@]: %@", [NSDate date], user.name, message);
}
@end

User.m

#import <Foundation/Foundation.h>
@class ChatRoom;@interface User : NSObject
@property (nonatomic, strong) NSString *name;
-(instancetype)initWithName:(NSString*)name;
-(void)sendMessage:(NSString*)message;
@end

User.m

#import "User.h"
#import "ChatRoom.h"@implementation User
- (instancetype)initWithName:(NSString *)name{if(self = [super init]) {self.name = name;}return self;
}- (void)sendMessage:(NSString *)message{[ChatRoom showMessage:message user:self];
}
@end

ViewController

- (void)viewDidLoad {[super viewDidLoad];User *robert = [[User alloc]initWithName:@"Robert"];User *john   = [[User alloc] initWithName:@"Hello! Robert!"];[robert sendMessage:@"Hi! John!"];[john sendMessage:@"Hello! Robert!"];
}

结果

 Wed Dec 19 14:16:11 2018 [Robert]: Hi! John!Wed Dec 19 14:16:11 2018 [Hello! Robert!]: Hello! Robert!

移动开发之设计模式- 中介者模式(IOSAndroid)相关推荐

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

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

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

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

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

    Java设计模式 - 中介者模式

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

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

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

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

  6. 学习设计模式 - 中介者模式

    中介者模式 一丶定义 定义一个中介者对象, 封装一系列对象的交互关系, 使得各对象不必显示的相互引用, 从而使其耦合松散, 而且可以独立的改变它们的交互 二丶理解 各对象显式地持有对方引用, 用于对象 ...

  7. 设计模式---中介者模式

    从前面讲到的设计模式的分类中,我们应该得知中介者模式是行为型模式的一种,旨在处理类或对象如何交互及如何分配职责.  中介者模式又叫做调停者模式,名字跟出国留学中介和房产中介是类似的.拿房产中介来说,现 ...

  8. 设计模式-中介者模式详解

    定义 中介模式的英文翻译是 Mediator Design Pattern.在 GoF 中的<设计模式>一书中,它是这样定义的: Mediator pattern defines a se ...

  9. [设计模式] - 中介者模式

    文章目录 一.中介者模式简介 1. 什么是中介者模式 2. 业务说明 3. 不使用中介者模式的代码实现 二.中介者模式的实现 1. 设计思路 2. 代码实现 三.中介者模式总结 1. 中介者模式的特点 ...

最新文章

  1. 瀚思首发三款产品 推动大数据安全战略布局
  2. Linux 服务详解
  3. 由Linux内核bug引起SSH登录缓慢问题的排查与解决
  4. SQLHELPER C#
  5. jmeter 查看提取的参数
  6. final类是否可以被代理_浅谈Java【代理设计模式】——看这篇文章就懂了
  7. C++设计模式-备忘录模式
  8. 电脑怎么打字切换中文_Master of Typing in Chinese for Mac(中文打字大师)
  9. 淘汰Hyper-V replication 拥抱Storage Replica
  10. 三维旋转矩阵_旋转之一 - 复数与2D旋转
  11. Json文件转Map(四)之代码
  12. Python基本用法练习题
  13. 全网推广有哪些推广方式?
  14. 【51单片机实例】智能小车(一)--------小车的前进、后退和停止
  15. 使用geotools构建特殊的多边形
  16. CactiEZ虚拟机安装
  17. Office Tool Plus
  18. 您身边专业的会议会展服务专家——大连世博会展服务公司!
  19. 图书馆情报领域核心期刊(2012)
  20. 第一篇综述-无人车简介(一)

热门文章

  1. 小木虫网站无法登陆(账号突然被封禁)的解决办法
  2. 利用JavaScript实现一个简单的猜数字游戏
  3. 对LARS(Least Angle Regression)的简单理解
  4. Python 获取优惠券淘宝口令
  5. grbl控制3轴机械臂 原理 实现 (四) 之GRBL源码修改驱动三轴机械臂
  6. 上海跃兔网络科技有限公司简介
  7. 转:latex 表格紧跟指定的文字后面
  8. 学习java第6天 模仿XP画板(10%)
  9. Linux signal()
  10. Kubernetes存活探针和就绪探针的最佳实践