Dotcpp  >  编程教程  >  行为型模式(Behavioral Patterns)  >  中介者模式

中介者模式

点击打开在线编译器,边学边练

中介者模式是一种行为型设计模式,它的主要目的是降低对象之间的耦合度,将对象之间的交互行为集中管理和控制,从而简化对象之间的通信过程。

在软件开发中,当一个系统中的对象之间存在复杂的交互关系时,对象之间的通信往往会变得非常混乱和复杂。这时候,引入一个中介者来协调和管理对象之间的交互,可以将复杂的网络结构转化为一个中心调度的模式,简化代码结构并提高系统的可维护性和可扩展性。

中介者模式中的核心组件是中介者(Mediator),它负责定义对象之间的通信协议,并控制对象之间的交互过程。每个对象通过与中介者进行通信来实现与其他对象的交互,而不是直接与其他对象进行通信。

中介者模式

下面是一个简单的示例,展示了如何使用介者模式:

// 定义一个中介者接口
public interface Mediator {
    void send(String message, Colleague colleague);
}
// 定义一个抽象同事类
public abstract class Colleague {
    protected Mediator mediator;
    public Colleague(Mediator mediator) {
        this.mediator = mediator;
    }
    public abstract void send(String message);
    public abstract void receive(String message);
}
// 具体同事类A
public class ConcreteColleagueA extends Colleague {
    public ConcreteColleagueA(Mediator mediator) {
        super(mediator);
    }
    public void send(String message) {
        mediator.send(message, this);
    }
    public void receive(String message) {
        System.out.println("Colleague A received message: " + message);
    }
}
// 具体同事类B
public class ConcreteColleagueB extends Colleague {
    public ConcreteColleagueB(Mediator mediator) {
        super(mediator);
    }
    public void send(String message) {
        mediator.send(message, this);
    }
    public void receive(String message) {
        System.out.println("Colleague B received message: " + message);
    }
}
// 具体中介者类
public class ConcreteMediator implements Mediator {
    private ConcreteColleagueA colleagueA;
    private ConcreteColleagueB colleagueB;
    public void setColleagueA(ConcreteColleagueA colleagueA) {
        this.colleagueA = colleagueA;
    }
    public void setColleagueB(ConcreteColleagueB colleagueB) {
        this.colleagueB = colleagueB;
    }
    public void send(String message, Colleague colleague) {
        if (colleague == colleagueA) {
            colleagueB.receive(message);
        } else if (colleague == colleagueB) {
            colleagueA.receive(message);
        }
    }
}
public class MediatorPatternDemo {
    public static void main(String[] args) {
        ConcreteMediator mediator = new ConcreteMediator();
        ConcreteColleagueA colleagueA = new ConcreteColleagueA(mediator);
        ConcreteColleagueB colleagueB = new ConcreteColleagueB(mediator);
        mediator.setColleagueA(colleagueA);
        mediator.setColleagueB(colleagueB);
        colleagueA.send("Hello, colleague B!"); 
        colleagueB.send("Hi, colleague A!"); 
    }
}

在这个示例中,Mediator接口定义了中介者的方法,Colleague抽象类定义了同事类的基本行为。ConcreteColleagueA和ConcreteColleagueB是具体的同事类,它们通过与中介者进行通信来实现与其他同事类的交互。ConcreteMediator是具体的中介者类,它实现了中介者接口,并负责控制和协调同事类之间的交互过程。

通过引入中介者,对象之间的通信变得更加简单和灵活,同时也降低了对象之间的耦合度。这种模式在复杂的系统和多个对象之间的协作中非常有用。


本文固定URL:https://www.dotcpp.com/course/1380

上一课:

迭代器模式

下一课:

备忘录模式

Dotcpp在线编译      (登录可减少运行等待时间)