设计模式之中介者模式

文章目录

概述

中介模式(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,翻篇。

相关推荐
LoveC5212 小时前
设计模式之适配器模式
设计模式·适配器模式
永卿0013 小时前
设计模式-责任链模式
java·设计模式·责任链模式
Codebee7 小时前
OneCode 3.0 智能数据处理:快速视图中的智能分页与 @PageBar 注解详解
后端·设计模式
Codebee7 小时前
OneCode 3.0智能分页拦截器深度解析:从拦截机制到性能优化
后端·设计模式
是2的10次方啊7 小时前
🎭 Java设计模式详解:让代码优雅如诗的秘密武器
设计模式
python_1369 小时前
python设计模式-工厂模式
开发语言·python·设计模式
k *9 小时前
c++:设计模式训练
设计模式
牛奶咖啡1312 小时前
学习设计模式《二十》——解释器模式
学习·设计模式·解释器模式·认识解释器模式·解释器模式的优缺点·何时使用解释器模式·解释器模式的示例
北_鱼12 小时前
设计模式1:创建型模式
java·设计模式·软件工程·代码规范·设计规范
使一颗心免于哀伤13 小时前
《设计模式之禅》笔记摘录 - 12.适配器模式
笔记·设计模式