java设计模式之中介者
时间:2021-09-10
本文章向大家介绍java设计模式之中介者,主要包括java设计模式之中介者使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
中介者设计模式大家都不模式,中介也很好理解,我们生活中也会碰到,比如房产中介之类的。
那么今天我们以房产中介和客户的例子来理解下中介者模式
一、中介者实现
首先,我们定义一个中介接口,他主要负责在客户之间传递消息
public interface Mediator { void send(Person src, String message); }
房产租赁市场上的人,有想租房的,也有往外租房的。他们互相是不认识的,也没有对方的联系方式,所有他们只能跟中介打交道
public abstract class Person { protected Mediator mediator; public Person(Mediator mediator) { this.mediator = mediator; } public abstract void send(String message); public abstract void accept(String message) ; }
实际中介的实现,他有买方和卖方的所有信息,我们这里只有一个买方和卖方,实际中应该是多对多的:
public class HouseAgency implements Mediator { private Person buyer; private Person seller; public void setBuyer(Person buyer) { this.buyer = buyer; } public void setSeller(Person seller) { this.seller = seller; } @Override public void send(Person src, String message) { System.out.println(src + " send:"+message ); if (src.equals(buyer)) { seller.accept(message); }else{ buyer.accept(message); } } }
真正的买方
public class Buyer extends Person { public Buyer(HouseAgency houseAgency) { super(houseAgency); } public void send(String message) { mediator.send(this, message); } public void accept(String message) { System.out.println(this.toString() + " accept:" + message); } @Override public String toString() { return "Buyer"; } }
卖方:
public class Seller extends Person { public Seller(HouseAgency houseAgency) { super(houseAgency); } public void send(String message) { mediator.send(this, message); } public void accept(String message) { System.out.println(this.toString() + " accept:" + message); } @Override public String toString() { return "Seller"; } }
买方和卖方通过中介者联系。所以他们都有中介的信息。
我们实现一次交流,卖方和买方都没有对方的信息,但他们通过中介实现了成功交易。
public class TestMain { public static void main(String[] args) { HouseAgency mediator = new HouseAgency(); Buyer buyer = new Buyer(mediator); Seller seller = new Seller(mediator); mediator.setBuyer(buyer); mediator.setSeller(seller); buyer.send("I like this house!"); seller.send("I can rent it to you!"); } }
输出:
Buyer send:I like this house! Seller accept:I like this house! Seller send:I can rent it to you! Buyer accept:I can rent it to you!
二、中介者应用场景
中介者在商品或者服务的交易市场最常出现,也叫经纪人。
因为大部分情况下,买东西的人不知道谁可以卖东西给他,卖东西的人不清楚谁需要我的商品。
这个时候就需要一个中介存在,这么理解那么JD、TB其实都算是中介。
1. 何时使用
- 多个类相互耦合,形成网状结构时
2. 方法
- 将网状结构分离为星型结构
3. 优点
- 减少类间依赖,降低了耦合
- 符合迪米特原则
4. 缺点
- 中介者会膨胀的很大,而且逻辑复杂
5. 使用场景
- 系统中对象之间存在比较复杂的引用关系
- 想通过一个中间类来封装多个类的行为,而又不想生成太多的子类
原文地址:https://www.cnblogs.com/wangbin2188/p/15250546.html
- SQL*Loader-805的解决(r2笔记36天)
- 用python实现决策树ID3算法,对隐形眼镜类型预测
- 用GA算法设计22个地点之间最短旅程-R语言实现
- 开发 | 谷歌发布TensorFlow 1.4版本:支持分布式训练,迎来三大新变化
- 创建用户时的密码校验问题(r2第34天)
- 巧用xmltype解析clob数据(r2笔记33天)
- R语言-中国各城市PM2.5数据间的相关分析
- 妹子如何运用R语言数据分析选择心仪的对象?
- 生产环境大型sql语句调优实战第一篇(二) (r2笔记32天)
- 生产环境大型sql语句调优实战第一篇(一) (r2笔记第31天)
- 讨论 | 你是否遇到过你完全不能理解的机器学习概念?
- 【专业技术】C++里面重要的几个关键字的用法
- sql monitor的使用(一) (r2第30天)
- sql_profile的使用(一) (r2笔记29天)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- SpringBoot2.x系列教程(六十一)Spring Boot集成FastDFS实现文件上传
- 解决对接华为kafka 进行Kerberos认证时的sun.security.krb5.KrbException
- Newbe.Claptrap 框架如何实现多级生命周期控制?
- Kafka linux(centos7)安装配置kerberos并在另一台机器上使用Java服务接收消息
- SpringCloud bus 手动post可用 使用webhooks自动更新配置失效的解决小记
- 处理Storm1.2.2 日志报错 与spring boot冲突
- Java 中的 ==, equals 与 hashCode 的区别与联系
- 专家精品|密码朋克的社会实验(三):比特币发明了什么
- 面试题答案
- Vue3 为何使用 Proxy 实现数据监听
- vivo 悟空活动中台 - H5 活动加载优化
- PostgreSQL常用命令
- 实用!一键生成数据库文档,堪称数据库界的Swagger
- 布隆过滤器原理
- 缓存穿透了怎么办?