中介者模式
- 中介者模式定义:
- 使用场景
- 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("我想租一套房子");}
}