一,介绍
中介者模式(Mediator Pattern)是一种行为设计模式,它定义了一个中介者对象来封装一系列对象之间的交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,可以独立地改变它们之间的交互。
二,适用场景
- 系统中对象之间存在复杂的引用关系,导致依赖关系结构混乱且难以复用。
- 想通过一个中介者对象来控制多个对象之间的交互,简化对象之间的通信。
三,结构
中介者模式包含以下几个角色:
- Mediator(中介者):定义了同事对象到中介者对象的接口。
- ConcreteMediator(具体中介者):实现中介者接口,协调各同事对象之间的交互。
- Colleague(同事类):每一个同事类都知道它的中介者对象,并且在需要与其他同事交互时,与中介者通信。
uml类图:
四,示例代码
下面是一个简单的中介者模式示例,展示了如何使用中介者模式来协调多个对象之间的通信。
定义中介者接口:
public interface Mediator {void sendMessage(String message, Colleague colleague);void addColleague(Colleague colleague);
}
实现具体中介者:
import java.util.ArrayList;
import java.util.List;public class ConcreteMediator implements Mediator {private List<Colleague> colleagues;public ConcreteMediator() {this.colleagues = new ArrayList<>();}@Overridepublic void sendMessage(String message, Colleague colleague) {for (Colleague c : colleagues) {// 消息不会发送给发送消息的同事if (c != colleague) {c.receiveMessage(message);}}}@Overridepublic void addColleague(Colleague colleague) {colleagues.add(colleague);}
}
定义同事类:
public 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);
}
实现具体同事类:
public class ConcreteColleagueA extends Colleague {public ConcreteColleagueA(Mediator mediator) {super(mediator);}@Overridepublic void sendMessage(String message) {System.out.println("ColleagueA sends message: " + message);mediator.sendMessage(message, this);}@Overridepublic void receiveMessage(String message) {System.out.println("ColleagueA receives message: " + message);}
}public class ConcreteColleagueB extends Colleague {public ConcreteColleagueB(Mediator mediator) {super(mediator);}@Overridepublic void sendMessage(String message) {System.out.println("ColleagueB sends message: " + message);mediator.sendMessage(message, this);}@Overridepublic void receiveMessage(String message) {System.out.println("ColleagueB receives message: " + message);}
}
客户端代码:
public class Client {public static void main(String[] args) {Mediator mediator = new ConcreteMediator();Colleague colleagueA = new ConcreteColleagueA(mediator);Colleague colleagueB = new ConcreteColleagueB(mediator);mediator.addColleague(colleagueA);mediator.addColleague(colleagueB);colleagueA.sendMessage("Hello from A!");colleagueB.sendMessage("Hello from B!");}
}
五,总结
中介者模式通过引入一个中介者对象来封装对象之间的交互,从而降低对象之间的耦合性,使系统更容易维护和扩展。在实际应用中,中介者模式常用于 GUI 应用程序中,以协调各组件之间的交互。
如果你对设计模式、软件架构、编程技巧等内容感兴趣,欢迎关注我们的同名微信公众号【技术拾光者】。在这里,我们将定期分享最新的技术文章和实用的编程技巧,帮助你不断提升自己的技术水平。
扫描下方二维码,立即关注我们吧!
感谢你的阅读和支持,我们期待与你在微信公众号上交流更多有趣的技术话题!