
中介者模式(Mediator Pattern)是一种行为型设计模式,它用于减少对象之间的直接依赖关系,从而降低耦合度。在中介者模式中,通过引入中介者对象,将系统中各个对象之间的交互行为集中到中介者对象中进行处理和调度,而不是让各个对象之间相互引用和交互。这样可以降低系统的复杂性,提高系统的可维护性和可扩展性。
传统设计模式讲解时使用的示例代码,大都采用与读者日常生活接解的业务系统没有多大关联关系。以致大部分读者无法做到学以致用,学完就忘记。本文采用使用日常生活中随处可见的电商业务来编写实现代码:
在电商平台中,买家和卖家之间的交互非常频繁,例如买家下单、卖家发货、买家确认收货等。如果采用传统的方式,每个买家和卖家都需要与其他买家和卖家进行直接交互,这样会导致系统的复杂度极高,而且难以维护和扩展。因此,引入中介者模式可以有效地解决这个问题。
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进行协调。当买家或卖家发送消息时,消息将发送到中介者对象,中介者对象将消息转发给其他买家或卖家,实现了买家和卖家之间的松耦合。