中介者模式介绍

一、基本介绍

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

二、代码实现

(1)创建同事抽象类和具体同事类

public abstract class Colleague {

    //中介者抽象类
    protected Mediator mediator;

    //接受消息
    public abstract void receive();

    //发送消息
    public abstract void send();

    public void setMediator(Mediator mediator) {
        this.mediator = mediator;
    }
}
public class ConcreteColleague1 extends Colleague {
    @Override
    public void receive() {
        System.out.println("一号同事接收数据");
    }

    @Override
    public void send() {
        System.out.println("一号同事发送数据");
        //请中介者转发
        this.mediator.relay(this);
    }
}
public class ConcreteColleague2 extends Colleague {
    @Override
    public void receive() {
        System.out.println("二号同事接收数据");
    }

    @Override
    public void send() {
        System.out.println("二号同事发送数据");
        //请中介者转发
        this.mediator.relay(this);
    }
}

(2)创建中介者接口和中介者实现类

public interface Mediator {

    void register(Colleague colleague);

    void relay(Colleague colleague);

}
public class ConcreteMediator implements Mediator {

    private List<Colleague> colleagues;

    public ConcreteMediator() {
        colleagues = new ArrayList<>();
    }

    public void register(Colleague colleague) {
        if (!colleagues.contains(colleague)) {
            colleague.setMediator(this);
            this.colleagues.add(colleague);
        }
    }

    public void relay(Colleague colleague) {
        colleagues.forEach(c -> {
            if (!c.equals(colleague)) {
                c.receive();
            }
        });
    }
}

(3)测试

public class Client {

    public static void main(String[] args) {
        Mediator mediator = new ConcreteMediator();

        Colleague colleague1 = new ConcreteColleague1();
        Colleague colleague2 = new ConcreteColleague2();

        mediator.register(colleague1);
        mediator.register(colleague2);

        colleague1.send();
        colleague2.send();
    }
}

三、UML类图

中介者模式UML类图

四、中介者模式小结

  • 多个类相互耦合,会形成网状结构, 使用中介者模式将网状结构分离为星型结构,进行解耦。
  • 减少类间依赖,降低了耦合,符合迪米特原则。
  • 中介者承担了较多的责任,一旦中介者出现了问题,整个系统就会受到影响。
  • 如果设计不当,中介者对象本身变得过于复杂,这点在实际使用时,要特别注意。

其他设计模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值