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

    你可能感兴趣的文章
    python基于flask搭建http服务(四)—— Docker容器化部署
    查看>>
    python基于flask搭建http服务(二)—— 实现Excel上传、数据清洗、入库
    查看>>
    python基于flask搭建http服务(三)—— 使用gunicorn部署项目
    查看>>
    python基于flask搭建http服务(一)—— 实现数据查询和Excel导出
    查看>>
    Python块键盘/鼠标输入
    查看>>
    python在心理学研究中的应用有哪些_心理学在线研究可用平台简介和应用进展
    查看>>
    python在使用HTMLTestRunner时,报告为空,错误提示<_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf_8'>...
    查看>>
    python在gpu上运行_【python】python开启GPU加速
    查看>>
    Python在def函数中使用for循环
    查看>>
    Python在def函数中使用for循环
    查看>>
    Python在Conda环境中,但在Windows虚拟环境中没有激活
    查看>>
    python系列【仅供参考】:python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
    查看>>
    python图像条状状噪声,使用PYTHON PIL从验证码图像中删除背景嘈杂的线条
    查看>>
    Python图像处理:从内存加载jpeg
    查看>>
    python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
    查看>>
    python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
    查看>>
    python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
    查看>>
    python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
    查看>>
    Python哪个版本最稳定好用2023.10.19
    查看>>
    Python和黑客技术的渊源
    查看>>