小侃设计模式(十七)-中介者模式

1.概述

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性,这种模式提供了一个中介类,来封装一组对象之间的交互,它将对象之间的交互委派给中介对象交互,避免了对象之间的直接交互。中介者又叫调停模式,是迪米特法则的典型代表。本文将详述中介者模式的原理及使用,帮助大家更好地理解。

2.原理及使用

2.1 原理

中介者的UML类图如下所示:
在这里插入图片描述
中介者包含的核心角色有四个:Mediator(抽象中介者)、ConcreteMediator(具体中介者)、Colleague(抽象同事角色)、ConcreteColleague(具有同事角色),具体角色职能如下:

Mediator(抽象中介者):用来定义参与者与中介者之间的交互方式;
ConcreteMediator(具体中介者):实现抽象中介者接口,实现具体交互方式;
Colleague(抽象同事角色):抽象类或者接口,定义参与者如何进行交互;
ConcreteColleague(具有同事角色):实现Colleague中的方法,定义具体行为。

2.2 案例

举一个中介买房的例子把,比较贴切。中介小王专门负责帮助顾客买卖房子,如果没有中介小王,准备卖房的小张和小李就要自己去发广告、联系买房的人,同样,卖房的王大妈也要自己去打广告,联系买房。小王在这里就相当于中介者,来接受卖方和买方的信息,推荐促成买卖。案例类图如下:
在这里插入图片描述
代码如下:

public interface Colleague {

    void sale();

    void buy();

}

public class HouseBuyer implements Colleague {

    private String name;

    private Double price;

    private Double size;

    public HouseBuyer(String name, Double price, Double size) {
        this.name = name;
        this.price = price;
        this.size = size;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public Double getSize() {
        return size;
    }

    public void setSize(Double size) {
        this.size = size;
    }

    @Override
    public void sale() {

    }

    @Override
    public void buy() {
        System.out.println(name + "需要的房子大小为:" + size + ",价格为:" + price);
        System.out.println(name + "寻找中介。。。");
    }

}

public class HouseSale implements Colleague {

    private String name;

    private Double price;

    private Double size;

    public HouseSale(String name, Double price, Double size) {
        this.name = name;
        this.price = price;
        this.size = size;

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public Double getSize() {
        return size;
    }

    public void setSize(Double size) {
        this.size = size;
    }

    @Override
    public void sale() {
        System.out.println(name + "卖的房子大小为:" + size + ",价格为:" + price);
    }

    @Override
    public void buy() {

    }
}

public interface Mediator {

    void deal();
}


public class WangMediator implements Mediator {

    private String name;

    private Colleague saler;

    private Colleague buyer;

    public WangMediator(String name, Colleague saler, Colleague buyer) {
        this.name = name;
        this.saler = saler;
        this.buyer = buyer;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Colleague getSaler() {
        return saler;
    }

    public void setSaler(Colleague saler) {
        this.saler = saler;
    }

    public Colleague getBuyer() {
        return buyer;
    }

    public void setBuyer(Colleague buyer) {
        this.buyer = buyer;
    }

    @Override
    public void deal() {
        saler.sale();
        System.out.println(name + "去寻找买方");
        buyer.buy();
        System.out.println(name + "找到买方并成交");
    }
}

测试代码:
public class Client {

    public static void main(String[] args) {
        //买方小王要买房
        HouseBuyer houseBuyer = new HouseBuyer("小张", 150.0, 90.0);
        //卖方王大妈要卖房
        HouseSale houseSale = new HouseSale("王大妈", 160.0, 90.0);
        //他们都找中介者小王
        WangMediator wangMediator = new WangMediator("小王", houseSale, houseBuyer);
        //小王根据需求匹配
        wangMediator.deal();

    }
}

运行结果如下:
在这里插入图片描述
上述案例中,卖方和买方可能有多个,应该是个列表形式,中介者会根据需求去匹配合适的卖方与买方。

2.3 中介者的优点和缺点

2.3.1 优点

1.中介者降低了类之间的耦合程度,所有关联者只与中介者有关系,符合迪米特法则;
2.中介者将对象之间的网状关系变为星型关系,降低了耦合度。

2.3.2 缺点

1.中介者承担了较多的职责,如果中介者出现问题,可能会导致整个系统奔溃;
2.如果设计不当,会导致中介者本身过于复杂;

3.小结

1.中介者模式是一种降低类之间耦合的方式,在日常开发的使用相对较少;
2.中介者的设计思想本质就是降低耦合。

4.参考文献

1.《设计模式之禅》-秦小波著
2.《大话设计模式》-程杰著
3.https://www.bilibili.com/video/BV1G4411c7N4-尚硅谷设计模式
4.https://juejin.cn/post/6986798871858905118

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值