中介者模式-协调多个对象之间的交互

中介者模式定义

用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

中介者模式结构图

在这里插入图片描述

中介者模式角色介绍

抽象中介者:Mediator,它定义一个接口,该接口用于与各同事对象之间进行通信。

具体中介者:ConcreteMediator,它是抽象中介者的子类,通过协调各个同事对象来实现协作行为,它维持了对各个同事对象的引用。

抽象同事类:Colleague,它定义各个同事类公有的方法,并声明了一些抽象方法来供子类实现,同时它维持了一个对抽象中介者类的引用,其子类可以通过该引用来与中介者通信。

具体同事类:ConcreteColleague,它是抽象同事类的子类;每一个同事对象在需要和其他同事对象通信时,先与中介者通信,通过中介者来间接完成与其他同事类的通信;在具体同事类中实现了在抽象同事类中声明的抽象方法。

中介者模式结构代码

抽象中介者:

public interface Mediator {
    //定义各个同事对象与中介者进行交互的方法
    void execute(String param);
}

具体中介者:

public class ConcreteMediator implements Mediator {
    private ConcreteColleagueA concreteColleagueA;
    private ConcreteColleagueB concreteColleagueB;


    public void execute(String param) {
        if ("toA".equals(param)){
            concreteColleagueA.methodA();
        }else if ("toB".equals(param)){
            concreteColleagueB.methodB();
        }else {
            System.out.println("nothing");
        }
    }

    public ConcreteColleagueA getConcreteColleagueA() {
        return concreteColleagueA;
    }

    public void setConcreteColleagueA(ConcreteColleagueA concreteColleagueA) {
        this.concreteColleagueA = concreteColleagueA;
    }

    public ConcreteColleagueB getConcreteColleagueB() {
        return concreteColleagueB;
    }

    public void setConcreteColleagueB(ConcreteColleagueB concreteColleagueB) {
        this.concreteColleagueB = concreteColleagueB;
    }
}

抽象同事类:

public abstract class Colleague {

    private Mediator mediator;

    public Colleague(Mediator mediator){
        this.mediator = mediator;
    }

    //定义公共方法,与中介者通信
    public void optionMediatorMethod(String param){
        mediator.execute(param);
    }
}

具体同事类A:

public class ConcreteColleagueA extends Colleague {
    public ConcreteColleagueA(Mediator mediator) {
        super(mediator);
    }

    public void methodA(){
        System.out.println("methodA");
    }
}

具体同事类B:

public class ConcreteColleagueB extends Colleague {
    public ConcreteColleagueB(Mediator mediator) {
        super(mediator);
    }


    public void methodB(){
        System.out.println("methodB");
    }
}

客户端:

public class Client {
    public static void main(String[] args) {
        ConcreteMediator mediator = new ConcreteMediator();
        ConcreteColleagueA concreteColleagueA = new ConcreteColleagueA(mediator);
        ConcreteColleagueB concreteColleagueB = new ConcreteColleagueB(mediator);

        mediator.setConcreteColleagueA(concreteColleagueA);
        mediator.setConcreteColleagueB(concreteColleagueB);

        //执行具体同事类A的逻辑
        concreteColleagueA.methodA();
        //发送通知给中介者类
        concreteColleagueA.optionMediatorMethod("toB");

        //执行具体同事类B的逻辑
        concreteColleagueB.methodB();
        //发送通知给中介者类
        concreteColleagueB.optionMediatorMethod("toA");
    }
}
中介者模式运行机制

所有同事类对象持有中介者对象,中介者对象持有所有同事类对象;
所有同事类对象都与中介者交互,中介者接收到同事类对象的调用之后,按照相关业务逻辑选择调用另一个同事类对象。

中介者模式解决的核心问题

中介者模式解决了各个对象之间纷繁复杂的依赖关系,统一与中介者进行依赖,实现各个对象直接解耦,实现最小化依赖,也是对迪米特法则的具体实现。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值