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

    你可能感兴趣的文章
    Openlayers实战:绘制多边形,导出CSV文件
    查看>>
    Openlayers实战:绘制带箭头的线
    查看>>
    Openlayers实战:输入WKT数据,输出GML、Polyline、GeoJSON格式数据
    查看>>
    Openlayers高级交互(10/20):绘制矩形,截取对应部分的地图并保存
    查看>>
    Openlayers高级交互(11/20):显示带箭头的线段轨迹,箭头居中
    查看>>
    Openlayers高级交互(14/20):汽车移动轨迹动画(开始、暂停、结束)
    查看>>
    Openlayers高级交互(15/20):显示海量多边形,10ms加载完成
    查看>>
    Openlayers高级交互(16/20):两个多边形的交集、差集、并集处理
    查看>>
    Openlayers高级交互(17/20):通过坐标显示多边形,计算出最大幅宽
    查看>>
    Openlayers高级交互(19/20): 地图上点击某处,列表中显示对应位置
    查看>>
    Openlayers高级交互(2/20):清除所有图层的有效方法
    查看>>
    Openlayers高级交互(3/20):动态添加 layer 到 layerGroup,并动态删除
    查看>>
    Openlayers高级交互(6/20):绘制某点,判断它是否在一个电子围栏内
    查看>>
    Openlayers高级交互(7/20):点击某点弹出窗口,自动播放视频
    查看>>
    Openlayers高级交互(8/20):选取feature,平移feature
    查看>>
    Openlayers:DMS-DD坐标形式互相转换
    查看>>
    openlayers:圆孔相机根据卫星经度、纬度、高度、半径比例推算绘制地面的拍摄的区域
    查看>>
    OpenLDAP(2.4.3x)服务器搭建及配置说明
    查看>>
    OpenLDAP编译安装及配置
    查看>>
    Openmax IL (二)Android多媒体编解码Component
    查看>>