面试题答案
一键面试中介者角色主要方法与职责
- 协调方法:用于协调各个同事对象之间的交互,避免同事对象之间直接相互引用。例如,
coordinate(Colleague colleague1, Colleague colleague2)
方法,根据不同的同事对象进行相应的业务逻辑处理。 - 注册方法:允许同事对象向中介者注册自身,以便中介者了解有哪些同事对象存在并能够协调它们。如
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!");
}
}