观察者模式实现状态变更时自动通知依赖对象,如用户登录后触发邮件、日志等操作;中介者模式通过中心协调降低多对象间通信的复杂度,如聊天室广播消息。两者均促进解耦与扩展。

在Java开发中,多个对象之间频繁交互是常态。如果处理不当,容易导致代码耦合度高、难以维护。观察者模式和中介者模式是两种经典的设计模式,能有效解耦对象间的通信,让结构更清晰。下面带你快速入门这两种模式的实际应用。
观察者模式:一对多的依赖通知
当一个对象的状态发生变化时,所有依赖它的对象都能自动收到通知并更新,这就是观察者模式的核心思想。Java提供了java.util.Observable类和Observer接口,但更推荐使用自定义接口的方式,避免继承限制。
场景示例:用户登录后需要发送邮件、记录日志、更新统计信息。
定义被观察者(Subject):
立即学习“Java免费学习笔记(深入)”;
import java.util.ArrayList;import java.util.List;public class UserLoginSubject { private List observers = new ArrayList(); private String username; public void addObserver(LoginObserver observer) { observers.add(observer); } public void login(String username) { this.username = username; System.out.println(username + " 登录了系统"); notifyObservers(); } private void notifyObservers() { for (LoginObserver observer : observers) { observer.update(username); } }}
定义观察者接口及实现:
public interface LoginObserver { void update(String username);}public class EmailService implements LoginObserver { public void update(String username) { System.out.println("邮件服务:向 " + username + " 发送欢迎邮件"); }}public class LogService implements LoginObserver { public void update(String username) { System.out.println("日志服务:记录用户 " + username + " 的登录时间"); }}
使用方式:
UserLoginSubject subject = new UserLoginSubject();subject.addObserver(new EmailService());subject.addObserver(new LogService());subject.login("Alice");
这样,新增通知逻辑只需添加新的观察者,无需修改原有代码,符合开闭原则。
中介者模式:通过中心协调减少直接依赖
当多个对象之间交互复杂,彼此持有引用会导致网状耦合。中介者模式引入一个“中间人”来统一管理对象间的通信,对象之间不再直接调用,而是通过中介者转发。
场景示例:聊天室中多个用户发送消息,由聊天室统一广播。
Word-As-Image for Semantic Typography
文字变形艺术字、文字变形象形字
62 查看详情
定义中介者接口:
public interface ChatMediator { void sendMessage(String msg, User user); void registerUser(User user);}
具体中介者实现:
import java.util.ArrayList;import java.util.List;public class ChatRoom implements ChatMediator { private List users = new ArrayList(); public void registerUser(User user) { users.add(user); } public void sendMessage(String msg, User sender) { for (User user : users) { if (user != sender) { user.receive(msg); } } }}
用户类只持有中介者引用:
public class User { private String name; private ChatMediator mediator; public User(String name, ChatMediator mediator) { this.name = name; this.mediator = mediator; mediator.registerUser(this); } public void send(String msg) { System.out.println(name + " 发送: " + msg); mediator.sendMessage(msg, this); } public void receive(String msg) { System.out.println(name + " 收到消息: " + msg); }}
使用示例:
ChatMediator chatRoom = new ChatRoom();User alice = new User("Alice", chatRoom);User bob = new User("Bob", chatRoom);alice.send("大家好!");bob.send("Alice你好!");
此时用户之间没有直接引用,所有通信由ChatRoom统一调度,结构清晰,扩展方便。
选择建议:根据场景合理使用
观察者模式适合“状态变化 → 通知响应”的场景,强调事件驱动和松耦合。中介者模式更适合多个对象协作复杂、交互频繁的情况,通过集中控制降低整体复杂度。
实际开发中,两者也可结合使用。比如中介者内部使用观察者来监听某些关键状态变更。
基本上就这些。掌握这两个模式,能让Java中的对象通信更清晰、更易维护。
以上就是如何使用Java让对象间通信方式更清晰_观察者与中介者模式入门的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1046895.html
微信扫一扫
支付宝扫一扫