Java实现中介者模式

中介者模式(Mediator Pattern)是一种行为型设计模式,它通过将对象之间的交互转移给中介者对象来实现。在这种模式中,对象之间不直接相互通信,而是通过中介者对象来进行通信和协调。 适用场景: 1. 当一个对象的改变需要同时改变其他对象时,可以使用中介者模式。通过引入中介者对象,可以将对象之间的耦合度降低,减少了对象之间的直接交互。 2. 当一个交互过程中涉及到大量的对象之间的交互,导致复杂的交互关系时,可以使用中介者模式来简化交互流程。 好处: 1. 减少了对象之间的直接耦合,使得代码更易于维护和拓展。 2. 将关注点集中到中介者对象上,使得代码更加清晰和易于理解。 3. 可以避免对象之间的循环依赖,提高代码的灵活性。 下面是一个使用Java实现中介者模式的示例代码: ```java // 中介者接口 interface Mediator { void sendMessage(String message, Colleague colleague); } // 具体中介者 class ConcreteMediator implements Mediator { private ColleagueA colleagueA; private ColleagueB colleagueB; public void setColleagueA(ColleagueA colleagueA) { this.colleagueA = colleagueA; } public void setColleagueB(ColleagueB colleagueB) { this.colleagueB = colleagueB; } @Override public void sendMessage(String message, Colleague colleague) { if (colleague == colleagueA) { colleagueB.receiveMessage(message); } else if (colleague == colleagueB) { colleagueA.receiveMessage(message); } } } // 抽象同事类 abstract class Colleague { protected Mediator mediator; public Colleague(Mediator mediator) { this.mediator = mediator; } public abstract void sendMessage(String message); public abstract void receiveMessage(String message); } // 具体同事类A class ColleagueA extends Colleague { public ColleagueA(Mediator mediator) { super(mediator); } @Override public void sendMessage(String message) { mediator.sendMessage(message, this); } @Override public void receiveMessage(String message) { System.out.println("ColleagueA received message: " + message); } } // 具体同事类B class ColleagueB extends Colleague { public ColleagueB(Mediator mediator) { super(mediator); } @Override public void sendMessage(String message) { mediator.sendMessage(message, this); } @Override public void receiveMessage(String message) { System.out.println("ColleagueB received message: " + message); } } // 测试类 public class MediatorPatternDemo { public static void main(String[] args) { ConcreteMediator mediator = new ConcreteMediator(); ColleagueA colleagueA = new ColleagueA(mediator); ColleagueB colleagueB = new ColleagueB(mediator); mediator.setColleagueA(colleagueA); mediator.setColleagueB(colleagueB); colleagueA.sendMessage("Hello, colleagueB!"); colleagueB.sendMessage("Hi, colleagueA!"); } } ``` 在上述示例代码中,中介者模式通过中介者接口和具体中介者类的实现来实现对象之间的通信和协调。抽象同事类定义了同事类的共同行为和对中介者的依赖,具体同事类继承抽象同事类并实现各自的方法。测试类创建了中介者、同事类实例,并通过中介者设置对应的同事类实例,然后调用同事类的方法来发送消息。通过中介者的转发,同事类接收到对方发送的消息并进行处理。

使用Python实现中介者模式

中介者模式用于解耦多个对象之间的复杂关系,通过引入一个中介对象来协调各个对象之间的通信。在Python中,可以利用类和对象的特性来实现中介者模式。 下面是一个简单的中介者模式示例代码: ```python class Mediator: def __init__(self): self.colleague1 = Colleague1(self) self.colleague2 = Colleague2(self) def notify(self, colleague, message): if colleague == self.colleague1: self.colleague2.receive(message) elif colleague == self.colleague2: self.colleague1.receive(message) class Colleague1: def __init__(self, mediator): self.mediator = mediator def send(self, message): self.mediator.notify(self, message) def receive(self, message): print(f"Colleague1 received: {message}") class Colleague2: def __init__(self, mediator): self.mediator = mediator def send(self, message): self.mediator.notify(self, message) def receive(self, message): print(f"Colleague2 received: {message}") mediator = Mediator() colleague1 = Colleague1(mediator) colleague2 = Colleague2(mediator) colleague1.send("Hello from Colleague1") colleague2.send("Hi from Colleague2") ``` 在这个示例代码中,`Mediator`类充当中介者,维护对各个同事对象的引用。`Colleague1`和`Colleague2`是两个具体的同事类,它们分别持有对中介者对象的引用。 当一个同事对象发送消息时,调用中介者的`notify`方法,并传入自身和消息内容。中介者根据不同的同事对象进行逻辑判断,决定将消息传递给其他同事对象。同事对象的`receive`方法用于接收消息并进行处理。 在示例代码的最后,创建了一个中介者对象和两个同事对象。分别通过调用`send`方法向中介者发送消息,在控制台输出接收到的消息。 这个示例只是一个简单的中介者模式实现,实际场景中可能会更加复杂。根据实际需求,可以根据中介者对象的封装程度和使用方式进行调整。