中介者模式是一种设计模式,用于在对象之间定义松散耦合的通信方式,使得对象之间不必显式地互相引用,降低系统的复杂度。中介者模式主要通过引入用于协调其他对象或类之间相互调用的中介者类,为了让系统具有具有更好的灵活性和扩展性。 ,,中介者模式的优点是可以提高代码的可重用性、可维护性、可扩展性和可测试性。缺点是增加了系统的复杂度和运行时间。
本文目录导读:
在软件开发过程中,我们经常会遇到这样的问题:当一个对象需要与多个对象进行交互时,如何降低系统的耦合度,提高代码的可维护性和可扩展性?这时,中介者模式(Mediator Pattern)作为一种非常有效的软件设计模式,可以帮助我们解决这个问题。
中介者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个对象都有机会决定这些对象的事务,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
我们将详细介绍中介者模式的基本概念、结构、实现以及优缺点。
基本概念
1、抽象主题(Abstract Mediator):定义了一个统一的接口,使得子类可以独立于具体的中介者而变化。
2、具体中介者(Concrete Mediator):实现了抽象主题中的操作,负责处理各子系统之间的通信。
3、抽象中介者(Abstract Colleague):定义了一个操作接口,使得具体中介者可以在不改变各子系统接口的情况下添加新的操作。
4、具体同事(Concrete Colleague):实现了抽象中介者中定义的操作接口,与具体中介者一起协作完成任务。
结构
中介者模式包括以下几个角色:
1、AbstractMediator:抽象中介者,定义了统一的接口,用于协调各个子系统之间的关系。
2、ConcreteMediator:具体中介者,实现了抽象中介者中的操作,负责处理各子系统之间的通信。
3、AbstractColleague:抽象同事,定义了一个操作接口,用于协调各个子系统之间的关系。
4、ConcreteColleague:具体同事,实现了抽象同事中定义的操作接口,与具体中介者一起协作完成任务。
实现
以一个在线书店为例,我们可以将用户、书籍和订单看作是三个独立的子系统,在这个系统中,用户可以查看书籍信息、下单购买书籍;书籍可以获取订单信息;订单可以包含用户信息和书籍信息,为了实现这三个子系统之间的通信,我们可以使用中介者模式。
我们需要创建一个抽象中介者类(OnlineBookStore),定义一个统一的接口(OrderInfo)来协调各个子系统之间的关系,创建两个具体中介者类(UserManager和BookManager),分别实现OrderInfo接口,负责处理用户和书籍之间的交互,创建一个抽象同事类(Book),并实现OrderInfo接口,与具体中介者一起协作完成任务。
// 抽象中介者类 public abstract class OnlineBookStore { protected UserManager userManager = new ConcreteUserManager(); protected BookManager bookManager = new ConcreteBookManager(); public void addUser(User user) { userManager.addUser(user); } public void addBook(Book book) { bookManager.addBook(book); } public void placeOrder(User user, Order order) { Book book = bookManager.getBookById(order.getBookId()); if (book != null) { bookManager.removeBook(book); // 从书店中移除该书 userManager.removeUser(user); // 从用户列表中移除该用户 } else { System.out.println("未找到该书籍"); } } }
优缺点
优点:
1、降低了系统的耦合度,提高了代码的可维护性和可扩展性。
2、当需要增加新的子系统时,只需要增加一个新的具体中介者类和一个新的抽象同事类即可,无需修改其他类的代码。
3、可以避免多重继承带来的问题。
缺点:
1、如果中介者数量过多,可能会导致性能下降,在实际应用中,需要根据具体情况来选择合适的中介者数量。