博客
关于我
《大话设计模式》中介者模式 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/

    你可能感兴趣的文章
    Mysql数据库相关各种类型的文件
    查看>>
    MYSQL数据库简单的状态检查(show processlist)
    查看>>
    MYSQL数据库简单的状态检查(show status)
    查看>>
    MySQL数据库系列
    查看>>
    MYSQL数据库自动本地/异地双备份/MYSQL增量备份
    查看>>
    mysql数据库表增添字段,删除字段、修改字段的排列等操作,还不快来
    查看>>
    MySQL数据库被黑了
    查看>>
    mysql数据库设计
    查看>>
    MySQL数据库设计与开发规范
    查看>>
    MYSQL数据库进阶操作
    查看>>
    MySQL数据库配置文件调优详解
    查看>>
    MySQL数据库酒店客房管理系统(含MySQL源码) 结课作业 做的不是很好
    查看>>
    mysql数据库里的一些坑(读高性能mysql有感)
    查看>>
    MySQL数据库面试题(2021最新版)
    查看>>
    MySQL数据库高并发优化配置
    查看>>
    mysql数据恢复
    查看>>
    MySQL数据的主从复制、半同步复制和主主复制详解
    查看>>
    mysql数据碎片整理
    查看>>
    MySQL数据类型
    查看>>
    MySQL数据类型字节长度
    查看>>