博客
关于我
《大话设计模式》中介者模式 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 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
    查看>>
    mysql 查询数据库所有表的字段信息
    查看>>
    【Java基础】什么是面向对象?
    查看>>
    mysql 查询,正数降序排序,负数升序排序
    查看>>
    MySQL 树形结构 根据指定节点 获取其下属的所有子节点(包含路径上的枝干节点和叶子节点)...
    查看>>
    mysql 死锁 Deadlock found when trying to get lock; try restarting transaction
    查看>>
    mysql 死锁(先delete 后insert)日志分析
    查看>>
    MySQL 死锁了,怎么办?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 深度分页性能急剧下降,该如何优化?
    查看>>
    MySQL 添加列,修改列,删除列
    查看>>
    mysql 添加索引
    查看>>
    MySQL 添加索引,删除索引及其用法
    查看>>
    mysql 状态检查,备份,修复
    查看>>
    MySQL 用 limit 为什么会影响性能?
    查看>>
    MySQL 用 limit 为什么会影响性能?有什么优化方案?
    查看>>
    MySQL 用户权限管理:授权、撤销、密码更新和用户删除(图文解析)
    查看>>
    mysql 用户管理和权限设置
    查看>>
    MySQL 的 varchar 水真的太深了!
    查看>>
    mysql 的GROUP_CONCAT函数的使用(group_by 如何显示分组之前的数据)
    查看>>