1. 基本概念
中介者模式(Mediator Pattern)也被称为调停者模式,是一种行为型设计模式,它通过一个中介对象来封装一组对象之间的交互,从而使这些对象不需要直接相互引用。这样可以降低对象之间的耦合度,使系统更容易维护和扩展。
2. 基本结构
中介者模式包括以下几个重要角色:
- 抽象中介者(Mediator): 定义中介者的接口,用于各个具体同事对象之间的通信。
- 具体中介者(Concrete Mediator): 实现抽象中介者接口,负责协调各个具体同事对象的交互关系,它需要知道所有具体同事类,并从具体同事接收消息,向具体同事对象发出命令。
- 抽象同事类(Colleague): 定义同事类的接口,维护一个对中介者对象的引用,用于通信。
- 具体同事类(Concrete Colleague): 实现抽象同事类接口,每个具体同事类只知道自己的行为,而不了解其他同事类的情况,因为它们都需要与中介者通信,通过中介者协调与其他同事对象的交互。
3. 简易实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| public abstract class Mediator { void register(Colleague colleague); public abstract void send(String message, Player player); }
public class ConcreteMediator extends Mediator { private List<Colleague> colleagues = new ArrayList<>(); 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); } } } }
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); }
class ConcreteColleague1 extends Colleague { public ConcreteColleague1(Mediator mediator) { super(mediator); }
@Override public void send(String message) { mediator.send(message, this); }
@Override public void receive(String message) { System.out.println("ConcreteColleague1 received: " + message); } }
class ConcreteColleague2 extends Colleague { public ConcreteColleague2(Mediator mediator) { super(mediator); }
@Override public void send(String message) { mediator.send(message, this); }
@Override public void receive(String message) { System.out.println("ConcreteColleague2 received: " + message); } }
public class Main{ public static void main(String[] args) { Mediator mediator = new ConcreteMediator();
Colleague colleague1 = new ConcreteColleague1(mediator); Colleague colleague2 = new ConcreteColleague2(mediator);
mediator.register(colleague1); mediator.register(colleague2);
colleague1.send("Hello from Colleague1!"); colleague2.send("Hi from Colleague2!"); } }
|
4. 使用场景
中介者模式使得同事对象不需要知道彼此的细节,只需要与中介者进行通信,简化了系统的复杂度,也降低了各对象之间的耦合度,但是这也会使得中介者对象变得过于庞大和复杂,如果中介者对象出现问题,整个系统可能会受到影响。
中介者模式适用于当系统对象之间存在复杂的交互关系或者系统需要在不同对象之间进行灵活的通信时使用,可以使得问题简化,