Java设计模式-中介模式/中介模式具体怎么使用,使用场景又是什么
继续整理记录这段时间来的收获,详细代码可在我的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设计模式-中介模式/中介模式具体怎么使用,使用场景又是什么相关推荐
- Java设计模式(装饰者模式-组合模式-外观模式-享元模式)
Java设计模式Ⅳ 1.装饰者模式 1.1 装饰者模式概述 1.2 代码理解 2.组合模式 2.1 组合模式概述 2.2 代码理解 3.外观模式 3.1 外观模式概述 3.2 代码理解 4.享元模式 ...
- java设计模式4--建造者模式(Builder)
本文地址:http://www.cnblogs.com/archimedes/p/java-builder-pattern.html,转载请注明源地址. 建造者模式 将一个复杂对象的构建与它的表示分离 ...
- Java设计模式-观察者模式(订阅发布模式)
Java设计模式-观察者模式(订阅发布模式) 一起来看 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一起坚持吧!! ...
- 适配接口 java_【Java 设计模式】接口型模式--Adapter(适配器)模式
简介:[Java设计模式]接口型模式–Adapter(适配器)模式Adapter模式的宗旨就是:向客户提供接口,并使用现有的类所提供的服务,以满足客户的需求. 或者说,现在有classA的方法满足客户 ...
- java设计模式2-观察者模式
java设计模式2-观察者模式 什么是观察者模式? 何谓观察者模式?观察者模式定义了对象之间的一对多依赖关系,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并且自动更新. 在这里,发生改变 ...
- Java设计模式之享元模式(UML类图分析+代码详解)
大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...
- java设计模式3种工厂模式
java设计模式3种工厂模式 2010-01-08 16:06:36| 分类: JAVA技术|举报|字号 订阅 下载LOFTER客户端 工厂模式分为三种: Simple Factory模式 专门定义 ...
- Java 设计模式 Adapter 对象适配器 模式
Java 设计模式 Adapter 对象适配器 模式 Adapter模式用于现有的程序无法直接使用,需要做适当的变换之后才能使用的情况. 涉及到的角色 Target对象:定义所需的方法. Client ...
- Java设计模式10,建造者模式
目录 一.建造者模式 二.建造者模式的结构 1.抽象建造者(Builder) 2.具体建造者(ConcreteBuilder) 3.指挥者(Director) 4.产品(Product) 三.建造者模 ...
- Java设计模式作业-责任链模式
Java设计模式作业-责任链模式:Web过滤器 文章目录 前言 一.类图 二.代码及测试结果 1.Trouble类 2.Support类 3.CharSupport类 4.TypeTransformS ...
最新文章
- 基于Vue的事件响应式进度条组件
- linux pstree乱码,pstree下显示乱码解决
- vuejs兄弟组件之间的通信
- ApkTool反编译出错brut.common.brutexception及java.io.filenotfoundexception 之一
- 用初中数学题理解SVM中不等式约束、拉格朗日乘子法、kkt条件、对偶
- django-关联查询-通过模型类跨表关联查询
- MySQL 报错 1093
- 模式识别中的特征提取及其内在意义
- php获取用户手机imei id,获取手机设备信息 IMEI
- windows中postman中文版安装
- echarts 2.0 macarons主题安装
- ISIS——基本概念1(邻居建立、路由计算、报文封装)
- 【考研政治】2021肖八整理(时政部分)
- 读取excel批量生成二维码
- 毕业设计-基于机器学习的动态 CAPM 模型
- [非技术]-电话面试感想
- 【2018慢性病与信息大会】曲晓杰:智能健康养老政策解读
- React动态效果——animate.css
- 多媒体计算机设备使用注意,多媒体教学设备使用管理制度
- 将element-plus分页组件由默认英文,改为中文