当前位置: 首页 > news >正文

大话设计模式——21.中介者模式(Mediator Pattern)

简介

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

UML图

在这里插入图片描述

应用场景
  • 大量的连接使得一个对象不可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体
  • 用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多个类中的行为而又不想生成太多的子类的场合

示例

联合国会议,用来处理世界各国的纠纷,联合国相当于中介者,各个国家在联合国进行谈判

  1. Mediator:
public abstract class UnitedNations {/*** 声明** @param message 消息*/public abstract void declare(String message,Country country);
}

理事会

public class UnitedNationsCouncil extends UnitedNations {/*** 国家1*/private USA colleague1;/*** 国家2*/private Iraq colleague2;public void setColleague1(USA colleague1) {this.colleague1 = colleague1;}public void setColleague2(Iraq colleague2) {this.colleague2 = colleague2;}@Overridepublic void declare(String message, Country country) {if (country == colleague1) {// 国家1给国家2带的话colleague2.getMessage(message);} else {colleague1.getMessage(message);}}
}
  1. Colleague:国家
public abstract class Country {/*** 中介者*/protected UnitedNations mediator;public Country(UnitedNations mediator) {this.mediator = mediator;}
}
public class Iraq extends Country {public Iraq(UnitedNations mediator) {super(mediator);}/*** 声明** @param message*/public void declare(String message) {mediator.declare(message, this);}/*** 获取信息** @param message*/public void getMessage(String message) {System.out.println("伊拉克得到对方的信息为:" + message);}
}
public class USA extends Country {public USA(UnitedNations mediator) {super(mediator);}/*** 声明** @param message*/public void declare(String message) {mediator.declare(message, this);}/*** 获取信息*/public void getMessage(String message) {System.out.println("美国获取对方消息为:" + message);}
}
  1. 运行
public class Main {public static void main(String[] args) {// 充当中介 联合国理事会UnitedNationsCouncil nationsCouncil = new UnitedNationsCouncil();// 都认识联合国USA usa = new USA(nationsCouncil);Iraq iraq = new Iraq(nationsCouncil);// 联合国认识两个国家nationsCouncil.setColleague1(usa);nationsCouncil.setColleague2(iraq);// 两个国家发表声明usa.declare("停止开发核武器,否则接受打击");iraq.declare("我们没有开发核武器,也不怕侵略!");}
}

在这里插入图片描述

总结

  • 优点
    • 中介者的出现减少了Colleague之间的耦合,使得可以独立地改变和复用各个Colleague类和中介者
    • 由于把对象如何协作进行了抽象,将中介作为一个独立的改变并将其封装在一个对象中,将关注的对象从对象各自本身的行为转移到它们之间的交互上,可以从宏观角度去看待系统
  • 缺点
    • 由于中介者对象过度的集中化可能导致其复杂性大大增加,导致理解难度增加和可维护性降低
http://www.lryc.cn/news/336632.html

相关文章:

  • Linux 计算机网络
  • bash脚本中‘-b -u -p’‘$# -eq’‘#!/bin/bash’‘sed -i “s/\r//“ $1’的用法说明
  • 【人工智能】Gitee AI 天数智芯有奖体验开源AI模型,一定能有所收货,快来体验吧
  • Ceph学习 -8.认证管理-用户基础
  • 大创项目推荐 深度学习+opencv+python实现昆虫识别 -图像识别 昆虫识别
  • Python小工具提升工作效率【附完整版,可下载word】
  • k8s-Pod
  • 智能网络新纪元:机器学习赋能未来计算机网络高速发展
  • 大数据之kafka应用
  • 嵌入式操作教程_数字信号处理_音频编解码:3-6 AAC音频解码实验
  • 【从浅学到熟知Linux】冯诺依曼体系结构及进程概念详谈!
  • word转pdf(前后端最全保姆级别)
  • 深度学习简介
  • 深入探索:使用C++构建顶级性能的网络服务器
  • SpringBoot学习笔记四
  • 雄安建博会:中矿雄安新区的总部开工建设
  • 蒙特卡洛方法【强化学习】
  • 构建第一个ArkTS之声明式UI描述
  • pytest教程-25-生成覆盖率报告插件-pytest-cov
  • 特征工程总结
  • JUC并发编程2(高并发,AQS)
  • Golang 为什么需要用反射
  • 【Linux的进程篇章 - 进程终止和进程等待的理解】
  • 《策略模式(极简c++)》
  • Python向文件里写入数据
  • 【网站项目】校园订餐小程序
  • vue-指令v-for
  • Python项目1 外星人入侵_外星人
  • 导入项目运行后,报错java: Cannot find JDK ‘XX‘ for module ‘XX‘
  • JS rgb,hex颜色值转换