【设计模式】行为型模式7——中介者模式

中介者模式类图
优点

  1. 降低了复杂度,使多对多的关系变成一对多(一个Mediator对多个Colleague)
  2. 符合迪米特法则(经纪人例子)
  3. 解耦各个Colleague类

缺点

  1. 业务全在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");
    }
}

结果
中介者模式结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值