文章目录
介绍
描述
中介者模式设计模式属于行为型模式,是作为通信双方的中介,代理双方,用一个中介对象类封装一系列对象之间的交互。
特点
优点:简化了对象之间打的关系,将系统对象之间的相互关系进行封装,将各个同事类之间的联系进行解耦。
缺点:由于封装对象之间的交互关系,导致中介类的逻辑关系变得复杂,系统维护比较困难。
实现原理
Mediator作为抽象中介者,ConcreteMediator作为具体中介者实现Mediator,需要知道所有的同事类,并且同事类将发送信息给中介者,中介者也需要根据消息向对应的同事类发送消息。
Colleague抽象同事类,ConcreteColleague具体同事类实现Colleague,作为同事类,只需要明确自己的行为,同时知道中介者是谁。
中介者处于核心位置,定义了所有同事之间的关系,作为转接存在。
命令模式
实现
租房案例,主人与租户,一个中介者协调主人和租户的关系。
第一步:创建中介者和同事抽象类。
// 抽象中介者
public abstract class Mediator {
public abstract void concat(String msg,Person person);
}
// 抽象同事
public abstract class Person {
Mediator mediator;
String name;
public Person(Mediator mediator, String name) {
this.mediator = mediator;
this.name = name;
}
}
第二步:创建具体中介者和同事类。
// 租户
public class Tenant extends Person{
public Tenant(Mediator mediator, String name) {
super(mediator, name);
}
public void concat(String msg){
mediator.concat(msg,this);
}
public void getMsg(String msg){
System.out.println("我是租客 " + name + " 收到信息 " + msg);
}
}
// 主人
public class Master extends Person{
public Master(Mediator mediator, String name) {
super(mediator, name);
}
public void concat(String msg){
mediator.concat(msg,this);
}
public void getMsg(String msg){
System.out.println("我是主人 " + name + " 收到信息 " + msg);
}
}
// 具体中介者
public class ConcreteMediator extends Mediator{
// 明确所有同事
private Tenant tenant;
private Master master;
@Override
public void concat(String msg, Person person) {
// 同事相互关系处理
if (person == tenant){
master.getMsg(msg);
}else {
tenant.getMsg(msg);
}
}
public void setTenant(Tenant tenant) {
this.tenant = tenant;
}
public void setMaster(Master master) {
this.master = master;
}
}
第三步:测试。
public class Test {
public static void main(String[] args) {
// 中介
ConcreteMediator mediator = new ConcreteMediator();
// 同事类
Master master = new Master(mediator,"主人 -- 王");
Tenant tenant = new Tenant(mediator,"租户 -- 李");
mediator.setMaster(master);
mediator.setTenant(tenant);
// 发送
master.concat("卖房中 ....");
tenant.concat("买房中 ....");
/*
我是租客 租户 -- 李 收到信息 卖房中 ....
我是主人 主人 -- 王 收到信息 买房中 ....
*/
}
}