优点
- 降低了复杂度,使多对多的关系变成一对多(一个Mediator对多个Colleague)
- 符合迪米特法则(经纪人例子)
- 解耦各个Colleague类
缺点
- 业务全在Colleague会变得复杂
/**
* 角色(Colleague)
*/
public abstract class Customer {
protected Mediator mediator;
public Customer(Mediator mediator) {
this.mediator = mediator;
}
public abstract void getMessage(String message);
}
/**
* 角色(ConcreteColleague)
*/
public class HouseOwner extends Customer{
public HouseOwner(Mediator mediator) {
super(mediator);
mediator.regist("HouseOwner", this);
}
@Override
public void getMessage(String message) {
System.out.println("出租人收到消息:" + message);
}
public void sendMessage(String message){
mediator.contact(message, this);
}
}
/**
* 角色(ConcreteColleague)
*/
public class Tenant extends Customer{
public Tenant(Mediator mediator) {
super(mediator);
mediator.regist("Tenant", this);
}
@Override
public void getMessage(String message) {
System.out.println("租房人收到消息:" + message);
}
public void sendMessage(String message){
mediator.contact(message, this);
}
}
public abstract class Mediator {
protected Map<String,Customer> customerMap;
public Mediator() {
this.customerMap = new HashMap<>();
}
public void regist(String type, Customer customer){
customerMap.put(type, customer);
}
public abstract void contact(String message, Customer customer);
}
public class ConcreteMediator extends Mediator{
@Override
public void contact(String message, Customer customer){
if(customer instanceof Tenant){
customerMap.get("HouseOwner").getMessage(message);
}else if(customer instanceof HouseOwner){
customerMap.get("Tenant").getMessage(message);
}else {
System.out.println("未找到该客户");
}
}
}
测试类
public class Test {
public static void main(String[] args) {
ConcreteMediator concreteMediator = new ConcreteMediator();
Tenant tenant = new Tenant(concreteMediator);
HouseOwner houseOwner = new HouseOwner(concreteMediator);
tenant.sendMessage("ca");
houseOwner.sendMessage("gun");
}
}
结果