设计模式之中介者模式

文章目录

概述

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

相关推荐
WaaTong2 小时前
《重学Java设计模式》之 原型模式
java·设计模式·原型模式
霁月风2 小时前
设计模式——观察者模式
c++·观察者模式·设计模式
暗黑起源喵5 小时前
设计模式-工厂设计模式
java·开发语言·设计模式
wrx繁星点点12 小时前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式
金池尽干14 小时前
设计模式之——观察者模式
观察者模式·设计模式
也无晴也无风雨14 小时前
代码中的设计模式-策略模式
设计模式·bash·策略模式
捕鲸叉1 天前
MVC(Model-View-Controller)模式概述
开发语言·c++·设计模式
wrx繁星点点1 天前
享元模式:高效管理共享对象的设计模式
java·开发语言·spring·设计模式·maven·intellij-idea·享元模式
凉辰1 天前
设计模式 策略模式 场景Vue (技术提升)
vue.js·设计模式·策略模式
菜菜-plus1 天前
java设计模式之策略模式
java·设计模式·策略模式