博客
关于我
《大话设计模式》中介者模式 Java代码
阅读量:759 次
发布时间:2019-03-23

本文共 2701 字,大约阅读时间需要 9 分钟。

定义

中介者模式(Mediator_pattern)是一种软件设计模式,旨在通过引入一个中介对象来封装一系列对象之间的交互。这种设计使得各个对象之间不需要直接引用,从而减少了对象之间的耦合度。同时,中介者对象也为系统的扩展和优化提供了便利,因为可以独立地修改对象之间的交互方式。

结构图

中介者模式的核心是通过一个中介者对象(Mediator)来管理对象之间的交互。各个对象称为同事(Colleague),它们通过中介者向对方发送消息。这种结构将网状的复杂交互转化为以中介者为中心的星形结构,使得系统更易于管理和扩展。

代码示例

public class Main {    public static void main(String[] args) {        ConcreteMediator m = new ConcreteMediator();        ConcreteColleague1 c1 = new ConcreteColleague1(m);        ConcreteColleague2 c2 = new ConcreteColleague2(m);        m.setColleague1(c1);        m.setColleague2(c2);        c1.send("吃过饭了吗");        c2.send("没有呢,你打算请客?");    }}abstract class Mediator {    public abstract void send(String message, Colleague colleague);}abstract class Colleague {    protected Mediator mediator;    public Colleague(Mediator mediator) {        this.mediator = mediator;    }}class ConcreteMediator extends Mediator {    private ConcreteColleague1 colleague1;    private ConcreteColleague2 colleague2;    public void setColleague1(ConcreteColleague1 colleague1) {        this.colleague1 = colleague1;    }    public void setColleague2(ConcreteColleague2 colleague2) {        this.colleague2 = colleague2;    }    @Override    public void send(String message, Colleague colleague) {        if (colleague == colleague1) {            colleague2.notify(message);        } else {            colleague1.notify(message);        }    }}class ConcreteColleague1 extends Colleague {    public ConcreteColleague1(Mediator mediator) {        super(mediator);    }    @Override    public void send(String message) {        mediator.send(message, this);    }    @Override    public void notify(String message) {        System.out.println("同事1得到信息:" + message);    }}class ConcreteColleague2 extends Colleague {    public ConcreteColleague2(Mediator mediator) {        super(mediator);    }    @Override    public void send(String message) {        mediator.send(message, this);    }    @Override    public void notify(String message) {        System.out.println("同事2得到信息:" + message);    }}

应用场景

中介者模式的核心优势在于它能够简化系统中复杂的对象交互关系。适用于以下场景:

  • 分布式系统:在分布式系统中,各子系统之间通过中介者进行通信,避免直接调用远程方法带来的复杂性。
  • 插入新成员:在需要往现有系统中引入新对象时,通过中介者进行适配,而不是修改现有类。
  • 替换 kolbanov 模式:在Kolbanov模式中,所有操作中心都需要直接引用数据库连接。这会导致数据库连接紧耦合,这种耦合度可以通过引入中介者来缓解。
  • 优点

  • 降低耦合度:通过引入中介者,对象之间的关系被抽象为一个独立的对象,从而减少了直接耦合。
  • 可扩展性:新增功能时只需要扩展中介者类,而无需修改所有相关对象。
  • 单一入口:中介者提供了对象间的唯一交互入口,简化了对象间的交互逻辑。
  • 少量改动:在需要修改对象间的交互时,只需修改中介者的实现即可,而无需修改所有相关对象。
  • 缺点

  • 复杂性:中介者类的实现通常比所有参与交互的对象类更复杂,增加了系统的复杂度。
  • 强耦合中介者:过度依赖中介者可能导致系统的耦合度反而增加,特别是当中介者的逻辑过于复杂时。
  • 示例

    联合国可以看作是一个典型的中介者例子。在联合国框架下,各个成员国通过中介者(联合国)与其他成员国进行沟通和协作,而不是直接与其他成员国互动。这种结构使得国际关系更加有序和可控。

    通过中介者模式,系统可以将网状的复杂结构转换为有序的星形结构。每个具体对象不再需要直接与其他对象通信,而是通过中介者进行交互。这使得系统的结构更加灵活和可维护,能够在不需要重大修改的情况下添加新的对象或功能。

    转载地址:http://gujzk.baihongyu.com/

    你可能感兴趣的文章
    PLC发展详解-ChatGPT4o作答+匹尔西
    查看>>
    PLC探针有什么用
    查看>>
    PLC接线详解
    查看>>
    PLC数组的使用(西门子)
    查看>>
    Quarzt定时调度任务
    查看>>
    SpringBoot之AOP详解
    查看>>
    PLC结构体(西门子)
    查看>>
    PLC编程语言ST文本语法的常用数据类型及变量
    查看>>
    PLC通讯方式
    查看>>
    Please install 'webpack-cli' in addition to webpack itself to use the CLI
    查看>>
    Ploly Dash,更新一个Dash应用程序JJJA上的实时人物
    查看>>
    Ploly烛台的定制颜色
    查看>>
    Ploly:如何在Excel中嵌入完全交互的Ploly图形?
    查看>>
    plotloss记录
    查看>>
    Plotly (Python) 子图:填充构面和共享图例
    查看>>
    Plotly 中的行悬停文本
    查看>>
    Plotly 停用 x 轴排序
    查看>>
    Plotly 域变量解释(多图)
    查看>>
    Plotly 绘制表面 3D 未显示
    查看>>
    Plotly-Dash 存在未知问题并创建“加载依赖项时出错“;通过使用 Python-pandas.date_range
    查看>>