中介者模式:提升代码可维护性的利器

一,介绍

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

二,适用场景

  • 系统中对象之间存在复杂的引用关系,导致依赖关系结构混乱且难以复用。
  • 想通过一个中介者对象来控制多个对象之间的交互,简化对象之间的通信。

三,结构

中介者模式包含以下几个角色:

  • Mediator(中介者):定义了同事对象到中介者对象的接口。
  • ConcreteMediator(具体中介者):实现中介者接口,协调各同事对象之间的交互。
  • Colleague(同事类):每一个同事类都知道它的中介者对象,并且在需要与其他同事交互时,与中介者通信。

uml类图:
在这里插入图片描述

四,示例代码

下面是一个简单的中介者模式示例,展示了如何使用中介者模式来协调多个对象之间的通信。

定义中介者接口:

public interface Mediator {
    void sendMessage(String message, Colleague colleague);
    void addColleague(Colleague colleague);
}

实现具体中介者:

import java.util.ArrayList;
import java.util.List;

public class ConcreteMediator implements Mediator {
    private List<Colleague> colleagues;

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

    @Override
    public void sendMessage(String message, Colleague colleague) {
        for (Colleague c : colleagues) {
            // 消息不会发送给发送消息的同事
            if (c != colleague) {
                c.receiveMessage(message);
            }
        }
    }

    @Override
    public void addColleague(Colleague colleague) {
        colleagues.add(colleague);
    }
}

定义同事类:

public abstract class Colleague {
    protected Mediator mediator;

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

    public abstract void sendMessage(String message);
    public abstract void receiveMessage(String message);
}

实现具体同事类:

public class ConcreteColleagueA extends Colleague {

    public ConcreteColleagueA(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void sendMessage(String message) {
        System.out.println("ColleagueA sends message: " + message);
        mediator.sendMessage(message, this);
    }

    @Override
    public void receiveMessage(String message) {
        System.out.println("ColleagueA receives message: " + message);
    }
}

public class ConcreteColleagueB extends Colleague {

    public ConcreteColleagueB(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void sendMessage(String message) {
        System.out.println("ColleagueB sends message: " + message);
        mediator.sendMessage(message, this);
    }

    @Override
    public void receiveMessage(String message) {
        System.out.println("ColleagueB receives message: " + message);
    }
}

客户端代码:

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

        Colleague colleagueA = new ConcreteColleagueA(mediator);
        Colleague colleagueB = new ConcreteColleagueB(mediator);

        mediator.addColleague(colleagueA);
        mediator.addColleague(colleagueB);

        colleagueA.sendMessage("Hello from A!");
        colleagueB.sendMessage("Hello from B!");
    }
}

五,总结

中介者模式通过引入一个中介者对象来封装对象之间的交互,从而降低对象之间的耦合性,使系统更容易维护和扩展。在实际应用中,中介者模式常用于 GUI 应用程序中,以协调各组件之间的交互。


如果你对设计模式、软件架构、编程技巧等内容感兴趣,欢迎关注我们的同名微信公众号【技术拾光者】。在这里,我们将定期分享最新的技术文章和实用的编程技巧,帮助你不断提升自己的技术水平。

扫描下方二维码,立即关注我们吧!
技术拾光者

感谢你的阅读和支持,我们期待与你在微信公众号上交流更多有趣的技术话题!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术拾光者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值