设计模式之中介者模式

简介: 设计模式之中介者模式

概述

中介模式(mediator pattern)的定义: 定义一个单独的(中介)对象,来封装一组对象之间的交互,将这组对象之间的交互委派给予中介对象交互,来避免对象之间的交互。

中介者对象就是用于处理对象与对象之间的直接交互,封装了多个对象之间的交互细节。中介模式的设计跟中间层很像,通过引入中介这个中间层,将一组对象之间的交互关系从多对多的网状关系转换为一对多的星状关系。原来一个对象要跟N个对象交互,现在只需要跟一个中介对象交互,从而最小化对象之间的交互关系,降低代码的复杂度,提高代码的可读性和可维护性。

中介者模式原理

中介者模式包含以下主要角色:

  • 抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法
  • 具体中介者(ConcreteMediator)角色:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。
  • 抽象同事类(Colleague)角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。
  • 具体同事类(Concrete Colleague)角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。

中介者模式实现

public interface Colleague {  
    void setMediator(Mediator mediator);  
    void receiveMessage(String message);  
    // 其他业务方法...  
}
public class ConcreteColleagueA implements Colleague {  
    private Mediator mediator;  
  
    @Override  
    public void setMediator(Mediator mediator) {  
        this.mediator = mediator;  
    }  
  
    @Override  
    public void receiveMessage(String message) {  
        System.out.println("Colleague A received message: " + message);  
        // 可以在这里执行其他操作...  
    }  
  
    // 假设Colleague A有一个方法需要通知其他同事  
    public void someOperation() {  
        mediator.notifyColleagueB("Hello from A!");  
    }  
}  
  
public class ConcreteColleagueB implements Colleague {  
    private Mediator mediator;  
  
    @Override  
    public void setMediator(Mediator mediator) {  
        this.mediator = mediator;  
    }  
  
    @Override  
    public void receiveMessage(String message) {  
        System.out.println("Colleague B received message: " + message);  
        // 可以在这里执行其他操作...  
    }  
  
    // 假设Colleague B有一个方法需要通知其他同事(此处为了简单起见,未实现)  
    // ...  
}
public interface Mediator {  
    void registerColleague(Colleague colleague);  
    void notifyColleagueB(String message); // 假设只通知B  
    // 可以添加其他通知方法,如notifyColleagueA等  
}  
  
public class ConcreteMediator implements Mediator {  
    private ConcreteColleagueA colleagueA;  
    private ConcreteColleagueB colleagueB;  
  
    @Override  
    public void registerColleague(Colleague colleague) {  
        if (colleague instanceof ConcreteColleagueA) {  
            colleagueA = (ConcreteColleagueA) colleague;  
            colleagueA.setMediator(this);  
        } else if (colleague instanceof ConcreteColleagueB) {  
            colleagueB = (ConcreteColleagueB) colleague;  
            colleagueB.setMediator(this);  
        }  
    }  
  
    @Override  
    public void notifyColleagueB(String message) {  
        if (colleagueB != null) {  
            colleagueB.receiveMessage(message);  
        }  
    }  
  
    // 可以添加其他通知方法...  
}

小结

这篇主要写了中介者模式的定义,原理,以及代码实现。对于这个设计模式来说,主要还是对象行为的。其实,设计模式主要就是对象行为或者类行为的。抓住这个关键点,学习起来就容易多了。OK,翻篇。

相关文章
|
8月前
|
设计模式 前端开发
设计模式21 - 中介者模式【【Mediator Pattern】
设计模式21 - 中介者模式【【Mediator Pattern】
30 0
|
8月前
|
设计模式 调度
行为型设计模式09-中介者模式
行为型设计模式09-中介者模式
25 0
|
8月前
|
设计模式 C++
设计模式之中介者模式(C++)
设计模式之中介者模式(C++)
|
4天前
|
设计模式
中介者模式-大话设计模式
中介者模式-大话设计模式
7 1
|
4天前
|
设计模式 Java 程序员
Java设计模式之中介者模式详解
Java设计模式之中介者模式详解
|
22天前
|
设计模式 前端开发 NoSQL
设计模式第八讲:观察者模式和中介者模式详解
 定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。
177 0
|
1月前
|
设计模式 Go
[设计模式 Go实现] 行为型~中介者模式
[设计模式 Go实现] 行为型~中介者模式
|
1月前
|
设计模式 Java
小谈设计模式(26)—中介者模式
小谈设计模式(26)—中介者模式
|
1月前
|
设计模式 Java
23种设计模式,中介者模式的概念优缺点以及JAVA代码举例
【4月更文挑战第8天】中介者模式是一种行为设计模式,它通过一个中介对象来封装一系列对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
48 8
|
1月前
|
设计模式 调度
【设计模式系列笔记】中介者模式
中介者模式(Mediator Pattern)是一种行为设计模式,它通过将对象之间的直接通信转移到一个中介对象中,来减少对象之间的耦合度。这种模式被用来处理一个对象与其他对象之间的交互,使得各对象之间不需要直接相互了解。
29 0