继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库Java设计模式克隆下载学习使用!

6.8 中介者模式

6.8.1 定义

调停模式,定义一个中介角色来封装一系列对象的之间交互,使元有对象之间的耦合松散,且可以独立改变它们之间的交互

6.8.2 结构

  • 抽象中介者(Mediator)角色:中介者接口,提供同事对象注册与转发同事对象信息的抽象方法
  • 具体中介者(Concrete Mediator)角色:实现中介者接口,定义一个List管理同事对象,协调各个同事角色之间交互关系,故依赖于同事角色
  • 抽象同事类(Colleague)角色:定义同事类接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能
  • 具体同事类(Concrete Colleague)角色:抽象同事类实现着,当需要与其它同事对象交互时,由中介者对象负责后续的交互

6.8.3 案例实现(租房客)

  • 抽象中介者
public abstract class Mediator {
//    沟通方法  abstract void contract(String message,Person person);
}
  • 具体中介者角色
public class MediatorStructure extends Mediator{  Tenant tenant;  HouseOwner houseOwner;  public Tenant getTenant() {  return tenant;  }  public void setTenant(Tenant tenant) {  this.tenant = tenant;  }  public HouseOwner getHouseOwner() {  return houseOwner;  }  public void setHouseOwner(HouseOwner houseOwner) {  this.houseOwner = houseOwner;  }  @Override  void contract(String message, Person person) {  if(person == houseOwner)  houseOwner.getMessage(message);  if(person == tenant)  tenant.getMessage(message);  }
}
  • 抽象同事类
public abstract class Person {  String name;  Mediator mediator;  public Person(String name, Mediator mediator) {  this.name = name;  this.mediator = mediator;  }  //    获取信息方法  abstract void getMessage(String message);
}
  • 具体同事类角色
public class HouseOwner extends Person{  public HouseOwner(String name, Mediator mediator) {  super(name, mediator);  }  //    租客获得信息  @Override  public void getMessage(String message) {  System.out.println("房主" + name + "获得信息是:" +message);  }  //    与中介沟通  public void contract(String message){  mediator.contract(message,this);  }
}public class Tenant extends Person{  public Tenant(String name, Mediator mediator) {  super(name, mediator);  }
//    租客获得信息  @Override  public void getMessage(String message) {  System.out.println("租客" + name + "获得信息是:" +message);  }
//    与中介沟通  public void contract(String message){  mediator.contract(message,this);  }
}
  • 测试
    public static void main(String[] args) {
//        创建中介者对象  MediatorStructure mediatorStructure = new MediatorStructure();
//        创建租客  Tenant tenant = new Tenant("张三",mediatorStructure);
//        创建房客  HouseOwner houseOwner = new HouseOwner("李四",mediatorStructure);  //        交与中介者  mediatorStructure.setTenant(tenant);  mediatorStructure.setHouseOwner(houseOwner);
//        各自信息  tenant.contract("需要一室一厅房子");  houseOwner.contract("我有一室一厅房子");  }
  • 结果
    - 类图

6.8.4 优缺点

6.8.4.1 优点

  • 松散耦合:将多个同事对象之间的交互封装到中介者对象,使得同事对象之间松耦合
  • 集中控制交互:多同事对象交互,被封装到中介者对象集中管理,使得交互行为发生变化时仅仅需要修改中介者对象,扩展也需要修改中介者对象
  • 一对多关联转变为一对一关联

6.8.4.2 缺点

同事类太多,中介者职责很大,会变得复杂而庞大,至于系统难维护

6.8.5 使用场景

  • 系统中对象之间存在负责的引用关系,系统结构混乱且难以理解
  • 当创建一个运行于多个类之间的对象,又不想生成新的子类时

Java设计模式-中介模式/中介模式具体怎么使用,使用场景又是什么相关推荐

  1. Java设计模式(装饰者模式-组合模式-外观模式-享元模式)

    Java设计模式Ⅳ 1.装饰者模式 1.1 装饰者模式概述 1.2 代码理解 2.组合模式 2.1 组合模式概述 2.2 代码理解 3.外观模式 3.1 外观模式概述 3.2 代码理解 4.享元模式 ...

  2. java设计模式4--建造者模式(Builder)

    本文地址:http://www.cnblogs.com/archimedes/p/java-builder-pattern.html,转载请注明源地址. 建造者模式 将一个复杂对象的构建与它的表示分离 ...

  3. Java设计模式-观察者模式(订阅发布模式)

    Java设计模式-观察者模式(订阅发布模式) 一起来看 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一起坚持吧!! ...

  4. 适配接口 java_【Java 设计模式】接口型模式--Adapter(适配器)模式

    简介:[Java设计模式]接口型模式–Adapter(适配器)模式Adapter模式的宗旨就是:向客户提供接口,并使用现有的类所提供的服务,以满足客户的需求. 或者说,现在有classA的方法满足客户 ...

  5. java设计模式2-观察者模式

    java设计模式2-观察者模式 什么是观察者模式? 何谓观察者模式?观察者模式定义了对象之间的一对多依赖关系,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并且自动更新. 在这里,发生改变 ...

  6. Java设计模式之享元模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  7. java设计模式3种工厂模式

    java设计模式3种工厂模式 2010-01-08 16:06:36|  分类: JAVA技术|举报|字号 订阅 下载LOFTER客户端 工厂模式分为三种: Simple Factory模式 专门定义 ...

  8. Java 设计模式 Adapter 对象适配器 模式

    Java 设计模式 Adapter 对象适配器 模式 Adapter模式用于现有的程序无法直接使用,需要做适当的变换之后才能使用的情况. 涉及到的角色 Target对象:定义所需的方法. Client ...

  9. Java设计模式10,建造者模式

    目录 一.建造者模式 二.建造者模式的结构 1.抽象建造者(Builder) 2.具体建造者(ConcreteBuilder) 3.指挥者(Director) 4.产品(Product) 三.建造者模 ...

  10. Java设计模式作业-责任链模式

    Java设计模式作业-责任链模式:Web过滤器 文章目录 前言 一.类图 二.代码及测试结果 1.Trouble类 2.Support类 3.CharSupport类 4.TypeTransformS ...

最新文章

  1. 基于Vue的事件响应式进度条组件
  2. linux pstree乱码,pstree下显示乱码解决
  3. vuejs兄弟组件之间的通信
  4. ApkTool反编译出错brut.common.brutexception及java.io.filenotfoundexception 之一
  5. 用初中数学题理解SVM中不等式约束、拉格朗日乘子法、kkt条件、对偶
  6. django-关联查询-通过模型类跨表关联查询
  7. MySQL 报错 1093
  8. 模式识别中的特征提取及其内在意义
  9. php获取用户手机imei id,获取手机设备信息  IMEI
  10. windows中postman中文版安装
  11. echarts 2.0 macarons主题安装
  12. ISIS——基本概念1(邻居建立、路由计算、报文封装)
  13. 【考研政治】2021肖八整理(时政部分)
  14. 读取excel批量生成二维码
  15. 毕业设计-基于机器学习的动态 CAPM 模型
  16. [非技术]-电话面试感想
  17. 【2018慢性病与信息大会】曲晓杰:智能健康养老政策解读
  18. React动态效果——animate.css
  19. 多媒体计算机设备使用注意,多媒体教学设备使用管理制度
  20. 将element-plus分页组件由默认英文,改为中文

热门文章

  1. App跳转微信小程序、微信公众号
  2. 京东云智能城市白皮书
  3. html空链接跳转,网页中空链接几种实现方法的区别
  4. 为什么说爱奇艺是一家技术公司?
  5. 金庸作品逐个数之《鹿鼎记》的读后感作文5000字
  6. 刀片服务器 怎么登录刀片服务器
  7. 用MATLAB模拟平面波的干涉
  8. Html表单和表格例子
  9. 历史上的今天:微软发布 Windows 8.1;IMDb 成立;海盗湾创始人诞生
  10. CVE-2019-9766-----Free MP3 CD Ripper音频转换器漏洞复现