MST

星途 面试题库

面试题:Java中介者模式中如何定义中介者角色

请阐述在Java实现中介者模式时,中介者角色通常包含哪些主要的方法与职责,并且给出一个简单的Java代码示例来说明如何定义这个中介者角色。
42.1万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

中介者角色主要方法与职责

  1. 协调方法:用于协调各个同事对象之间的交互,避免同事对象之间直接相互引用。例如,coordinate(Colleague colleague1, Colleague colleague2) 方法,根据不同的同事对象进行相应的业务逻辑处理。
  2. 注册方法:允许同事对象向中介者注册自身,以便中介者了解有哪些同事对象存在并能够协调它们。如 register(Colleague colleague) 方法。

Java代码示例

import java.util.ArrayList;
import java.util.List;

// 抽象同事类
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
class ConcreteColleagueA extends Colleague {
    public ConcreteColleagueA(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void send(String message) {
        System.out.println("ConcreteColleagueA sends message: " + message);
        mediator.send(message, this);
    }

    @Override
    public void receive(String message) {
        System.out.println("ConcreteColleagueA receives message: " + message);
    }
}

// 具体同事类B
class ConcreteColleagueB extends Colleague {
    public ConcreteColleagueB(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void send(String message) {
        System.out.println("ConcreteColleagueB sends message: " + message);
        mediator.send(message, this);
    }

    @Override
    public void receive(String message) {
        System.out.println("ConcreteColleagueB receives message: " + message);
    }
}

// 中介者接口
interface Mediator {
    void register(Colleague colleague);
    void send(String message, Colleague colleague);
}

// 具体中介者类
class ConcreteMediator implements Mediator {
    private List<Colleague> colleagues = new ArrayList<>();

    @Override
    public void register(Colleague colleague) {
        colleagues.add(colleague);
    }

    @Override
    public void send(String message, Colleague colleague) {
        for (Colleague c : colleagues) {
            if (c != colleague) {
                c.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.register(colleagueA);
        mediator.register(colleagueB);

        colleagueA.send("Hello, ColleagueB!");
    }
}