中介者模式

news/2024/11/27 2:12:34/

中介者模式

  • 中介者模式定义:
    • 使用场景
      • 1、房地产中介:房东和租客之间需要通过中介公司来联系,中介公司负责协调双方之间的交流和协商,从而促成房屋出租的交易。
      • 2、航空管制中心:在航空交通中,机场、飞机、航空管制中心之间需要相互协作,航空管制中心负责协调各方之间的通信和协调,确保航班的安全和顺利。
      • 3、车联网系统:在一个车联网系统中,车辆、交通信号灯、路况监控系统等都需要相互通信和协作,车联网系统负责协调各方之间的通信和协调,以提高交通效率和安全。
      • 4、聊天软件:在一个聊天软件中,多个用户之间需要相互通信和协作,聊天软件负责协调各方之间的通信和协调,以保证信息的传输和交流。
    • 角色定义
      • Mediator 抽象中介者角色
      • Concrete Mediator具体中介者角色:
      • Colleaque 同事角色
    • 需求背景
      • 1. 抽象中介者
      • 2. 具体中介者
      • 3. 同事角色
      • 4. 测试案例

中介者模式定义:

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

使用场景

1、房地产中介:房东和租客之间需要通过中介公司来联系,中介公司负责协调双方之间的交流和协商,从而促成房屋出租的交易。

2、航空管制中心:在航空交通中,机场、飞机、航空管制中心之间需要相互协作,航空管制中心负责协调各方之间的通信和协调,确保航班的安全和顺利。

3、车联网系统:在一个车联网系统中,车辆、交通信号灯、路况监控系统等都需要相互通信和协作,车联网系统负责协调各方之间的通信和协调,以提高交通效率和安全。

4、聊天软件:在一个聊天软件中,多个用户之间需要相互通信和协作,聊天软件负责协调各方之间的通信和协调,以保证信息的传输和交流。

角色定义

Mediator 抽象中介者角色

抽象中介者角色定义统一的接口,用于各同事角色之间的通信。

Concrete Mediator具体中介者角色:

具体中介者角色通过协调各同事角色实现协作行为,因此它必须依赖于各个同事角色。

Colleaque 同事角色

每一个同事角色都知道中介者角色,而且与其他的同事角色通信的时候,一定要通过中介者角色协作。

需求背景

房东需要把房子出租出去,但是不知道去哪里找租客,租客需要租房子,但是不知道去哪找出租的房子,于是,房屋中介公司出现了,成为了房东和租客之间的桥梁。

下面是一个简单的Java代码实现:

1. 抽象中介者

public interface Mediator {void registerColleague(Colleague colleague);void sendMessage(Colleague sender, String message);
}

2. 具体中介者

public class HouseAgency implements Mediator {private Landlord landlord;private Tenant tenant;public void setLandlord(Landlord landlord) {this.landlord = landlord;}public void setTenant(Tenant tenant) {this.tenant = tenant;}@Overridepublic void registerColleague(Colleague colleague) {if (colleague instanceof Landlord) {setLandlord((Landlord) colleague);} else if (colleague instanceof Tenant) {setTenant((Tenant) colleague);}}@Overridepublic void sendMessage(Colleague sender, String message) {if (sender == landlord) {tenant.receiveMessage(message);} else if (sender == tenant) {landlord.receiveMessage(message);}}
}

3. 同事角色

public abstract class Colleague {protected Mediator mediator;public Colleague(Mediator mediator) {this.mediator = mediator;}public abstract void sendMessage(String message);public abstract void receiveMessage(String message);
}public class Landlord extends Colleague {public Landlord(Mediator mediator) {super(mediator);}@Overridepublic void sendMessage(String message) {mediator.sendMessage(this, message);}@Overridepublic void receiveMessage(String message) {System.out.println("房东收到消息:" + message);}
}public class Tenant extends Colleague {public Tenant(Mediator mediator) {super(mediator);}@Overridepublic void sendMessage(String message) {mediator.sendMessage(this, message);}@Overridepublic void receiveMessage(String message) {System.out.println("租客收到消息:" + message);}
}

4. 测试案例

public class Test {public static void main(String[] args) {Mediator mediator = new HouseAgency();Landlord landlord = new Landlord(mediator);Tenant tenant = new Tenant(mediator);mediator.registerColleague(landlord);mediator.registerColleague(tenant);landlord.sendMessage("我有一套房子要出租");tenant.sendMessage("我想租一套房子");}
}

http://www.ppmy.cn/news/61858.html

相关文章

Excel高频 (IF,Countif,Sum,rank,max,min) 函数使用教程

工作中经常会用到IF判断,COUNTIF按条件统计个数,SUM求和,RANK排名次,MAX求最大,MIN求最小,AVERAGE求平均等函数,读书屋办公教程网将通过这篇文章采用图文结合的形式详细讲解Excel这几个函数的用法。 一、 判…

ICV:中国车载超声波雷达市场规模预计2024年可达20亿美元

近年来,由于市场对车辆先进安全功能的需求的增加,汽车超声波传感器市场一直保持稳步增长。ICV估计,车载超声波传感器全球市场预计在2022年至2027年之间以11.5%的复合年增长率增长,这种增长是由越来越多的高级驾驶辅助系…

谈谈java继承与多态

目录 继承 1.为什么要继承 2.继承的概念 3.继承的语法 4.子类与父类访问 super的用法 多态 1.满足条件 2.体现 3.重写 3.向上转型 4.向下转型 继承 1.为什么要继承 我们的对象不止一个,但是ta们可能有相同的部分,为了将这些共性抽取&#x…

为什么软件iic需要用开漏输出和上拉电阻

1、疑惑: 不知道大家有没有这种疑惑,在软件iic的配置过程当中,有些时候要输出高低电平,为什么使用开漏输出而不是推挽输出? 2.推挽输出和开漏输出的区别 推挽输出: 输出逻辑0,则N-MOS激活;输…

网站没有备案对seo有什么副作用

1、服务器地理位置 随着百度算法的不断提升,百度搜索结果逐渐从千人一面,转向千人千面,简单的理解就是,早期,你在百度检索一个特定关键词,那么基于所有地理位置的反馈结果都一样。 而随着技术的更迭&…

让ChatGPT猜你喜欢——ChatGPT后面的推荐系统

Chat GPT的大热,让人们的视线又一次聚焦于“人工智能”领域。通过与用户持续对话的形式,更加丰富的数据会不断滚动“雪球”,让Chat GPT的回答变得越来越智能,越来越接近用户最想要的答案。ChatGPT能否颠覆当下的推荐系统范式&…

AIGC产业研究报告 2023——图像生成篇

易观:今年以来,随着人工智能技术不断实现突破迭代,生成式AI的话题多次成为热门,而人工智能内容生成(AIGC)的产业发展、市场反应与相应监管要求也受到了广泛关注。为了更好地探寻其在各行业落地应用的可行性…

软考中级工程师笔记(持续更新)

进制 正负0 -0原000110010000 1000反000111100000 1111补000111110000 0000 取值范围 原 -(2n-1)-1~(2n-1)-1 数量 [(2n-1)-1]-[-(2n-1)-1] 1(1代表0)(2*2n-1)-1**2n-1** 反 -(2n-1)-1~(2n-1)-1 数量 [(2n-1)-1]-[-(2n-1)-1] 1(1代表0)(2*2n-1)-1**2n-1** 补 -(2n-1)~(2n-…