行为型模式-07中介者模式

七、中介者模式

1. 定义

  • 又叫调停模式,定义一个中介角色来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以 独立地改变它们之间的交互。

2. 结构

  • 抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的 抽象方法。
  • 具体中介者(ConcreteMediator)角色:实现中介者接口,定义一个 List 来管理同事对 象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。
  • 抽象同事类(Colleague)角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽 象方法,实现所有相互影响的同事类的公共功能。
  • 具体同事类(Concrete Colleague)角色:是抽象同事类的实现者,当需要与其他同事对象交 互时,由中介者对象负责后续的交互。

3. 案例

  • 举一个男女朋友的故事吧,需要一个中介者进行传话

  • UML

image-20210528151321371

4. 代码

  • mediator
/** * 抽象中介者类 */public abstract class Mediator {    public abstract void constact(String message,Person person);}
  • MediatorStructure
/**
 * 具体的中介者角色类
 */
public class MediatorStructure extends Mediator{

    //聚合男孩和女孩对象
    private Girl girl;
    private Boy boy;

    public Girl getGirl() {
        return girl;
    }

    public void setGirl(Girl girl) {
        this.girl = girl;
    }

    public Boy getBoy() {
        return boy;
    }

    public void setBoy(Boy boy) {
        this.boy = boy;
    }

    @Override
    public void constact(String message, Person person) {
        if(person == boy){
            girl.getMessage(message);
        }else {
            boy.getMessage(message);
        }
    }
}
  • Person
/**
 * 抽象同事类
 */
public abstract class Person {
    protected String name;
    protected Mediator mediator;

    public Person(String name, Mediator mediator) {
        this.name = name;
        this.mediator = mediator;
    }
}
  • Girl
/** * 具体的同事角色类 */public class Girl extends Person{    public Girl(String name, Mediator mediator) {        super(name, mediator);    }    /**     * 和中介联系     * @param message     */    public void constact(String message){        mediator.constact(message,this);    }    //获取信息    public void getMessage(String message){        System.out.println("女孩收到:"+message);    }}
  • Boy
/** * 具体的同事角色类 */public class Boy extends Person{    public Boy(String name, Mediator mediator) {        super(name, mediator);    }    /**     * 和中介联系     * @param message     */    public void constact(String message){        mediator.constact(message,this);    }    //获取信息    public void getMessage(String message){        System.out.println("男孩收到:"+message);    }}
  • 测试类
public class Client {    public static void main(String[] args) {        //创建中介者对象        MediatorStructure ms = new MediatorStructure();        //创建女孩对象        Girl girl = new Girl("Crj",ms);        //创建男孩对象        Boy boy = new Boy("Jerry",ms);        //中介者要知道具体的男孩,女孩        ms.setBoy(boy);        ms.setGirl(girl);        //设置双方需要传递的话语        boy.constact("我要找Crj");        girl.constact("别来了");    }}//测试结果//女孩收到:我要找Crj//男孩收到:别来了

5. 优缺点

  • 优点
    • 松散耦合
    • 多个同事对象互补,封装到中介者对象,当交互行为发生变化时,只需要改中介者对象。
    • 一对多关联变为一对一关联,由中介者一对一进行对话
  • 缺点
    • 当同事类太多时,中介者的职责将很大,它会变得复杂而庞大,以至于系统难以维护。

6. 使用场景

  • 系统中对象之间存在复杂的引用关系,系统结构混乱且难以理解。
  • 当想创建一个运行于多个类之间的对象,又不想生成新的子类时。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值