设计模式之中介者模式

文章目录

概述

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

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

中介者模式原理

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

  • 抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。

  • 具体中介者(ConcreteMediator)角色:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。

  • 抽象同事类(Colleague)角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。

  • 具体同事类(Concrete Colleague)角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。

中介者模式实现

java 复制代码
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,翻篇。

相关推荐
杨充4 小时前
10.可测试性实战设计
设计模式·开源·代码规范
杨充4 小时前
9.重构十二式的实战
设计模式·开源·代码规范
杨充4 小时前
6.设计原则的全景图
设计模式·开源·全栈
杨充5 小时前
2.面向对象的特性
设计模式
杨充5 小时前
7.SOLID原则案例汇
设计模式·开源·全栈
杨充5 小时前
8.反模式与坏味道
设计模式·开源·代码规范
杨充5 小时前
3.接口vs抽象类比较
设计模式
咖啡八杯8 小时前
文法、BNF与AST
java·设计模式·解释器模式·ast·文法
咖啡八杯16 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式