1.中介者模式定义
中介者模式(Mediator Pattern)是一种行为型设计模式,它用于减少对象之间的直接依赖关系,从而降低耦合度。在中介者模式中,通过引入中介者对象,将系统中各个对象之间的交互行为集中到中介者对象中进行处理和调度,而不是让各个对象之间相互引用和交互。这样可以降低系统的复杂性,提高系统的可维护性和可扩展性。
2.中介者模式优点
- 降低了系统的复杂度
- 中介者模式将系统中的对象之间的交互行为集中到中介者对象中进行处理和调度,从而降低了系统的复杂度。
- 提高了系统的可维护性和可扩展性
- 由于中介者对象负责协调对象之间的交互行为,因此系统的维护和扩展变得更加容易。
- 提高了系统的灵活性
- 由于对象之间的交互行为被集中到中介者对象中,因此可以通过修改中介者对象来改变对象之间的交互方式,从而提高了系统的灵活性。
3.中介者模式缺点
- 中介者对象会变得复杂
由于中介者对象负责协调对象之间的交互行为,因此它可能会变得非常复杂,难以维护。当系统中的对象数量增加时,中介者对象的复杂度也会增加,可能会导致代码难以理解和维护。
- 中介者对象过于集中
如果中介者对象承担了过多的职责,可能会导致系统的单点故障和性能瓶颈问题。因为中介者对象需要处理所有对象之间的交互行为,如果中介者对象出现问题,整个系统的功能都会受到影响。
- 对象之间的交互变得复杂
在中介者模式中,对象之间的交互需要通过中介者对象进行协调和处理,这可能会导致交互变得复杂,难以理解。此外,如果系统中存在多个中介者对象,对象之间的交互可能会变得更加复杂。
- 降低了系统的灵活性
由于对象之间的交互行为被集中到中介者对象中,因此系统的灵活性可能会受到影响。如果需要改变对象之间的交互方式,可能需要修改中介者对象的代码,这可能会对系统的稳定性和可维护性造成影响。
4.解释器模式示例代码
传统设计模式讲解时使用的示例代码,大都采用与读者日常生活接解的业务系统没有多大关联关系。以致大部分读者无法做到学以致用,学完就忘记。本文采用使用日常生活中随处可见的电商业务来编写实现代码:
在电商平台中,买家和卖家之间的交互非常频繁,例如买家下单、卖家发货、买家确认收货等。如果采用传统的方式,每个买家和卖家都需要与其他买家和卖家进行直接交互,这样会导致系统的复杂度极高,而且难以维护和扩展。因此,引入中介者模式可以有效地解决这个问题。
public interface Mediator {
void sendMessage(String message, User user);
}
public class ChatRoomMediator implements Mediator {
private List<User> users;
public ChatRoomMediator() {
this.users = new ArrayList<>();
}
@Override
public void sendMessage(String message, User user) {
for (User u : users) {
if (u != user) {
u.receive(message);
}
}
}
public void addUser(User user) {
this.users.add(user);
}
}
public abstract class User {
protected Mediator mediator;
protected String name;
public User(Mediator mediator, String name) {
this.mediator = mediator;
this.name = name;
}
public abstract void send(String message);
public abstract void receive(String message);
}
public class Buyer extends User {
public Buyer(Mediator mediator, String name) {
super(mediator, name);
}
@Override
public void send(String message) {
mediator.sendMessage("Buyer " + name + " says: " + message, this);
}
@Override
public void receive(String message) {
System.out.println("Buyer " + name + " received message: " + message);
}
}
public class Seller extends User {
public Seller(Mediator mediator, String name) {
super(mediator, name);
}
@Override
public void send(String message) {
mediator.sendMessage("Seller " + name + " says: " + message, this);
}
@Override
public void receive(String message) {
System.out.println("Seller " + name + " received message: " + message);
}
}
public class Client {
public static void main(String[] args) {
ChatRoomMediator mediator = new ChatRoomMediator();
User buyer1 = new Buyer(mediator, "Alice");
User buyer2 = new Buyer(mediator, "Bob");
User seller1 = new Seller(mediator, "Cindy");
User seller2 = new Seller(mediator, "David");
mediator.addUser(buyer1);
mediator.addUser(buyer2);
mediator.addUser(seller1);
mediator.addUser(seller2);
buyer1.send("Hi, everyone!");
seller1.send("Hello, everyone!");
}
}
以上代码实现了一个简单的电商平台,其中买家和卖家之间的交互通过中介者对象ChatRoomMediator
进行协调。当买家或卖家发送消息时,消息将发送到中介者对象,中介者对象将消息转发给其他买家或卖家,实现了买家和卖家之间的松耦合。