观察者模式
观察者模式
1.观察者模式原理
观察者模式定义:简单地说,观察者定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象,这样一个主题对象在状态的变化就能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象能够自动更新。
2.观察者模式实现:
- 具体被观察者接口:
package com.lili.observer;
/**
* 被观察者接口
*
* @author: QiJingJing
* @create: 2021/7/18
*/
public interface MessageSubject {
/**
* 注册观察者
*/
void registerObserver(Observer o);
/**
* 移除观察者
*/
void removeObserver(Observer o);
/**
* 通知所有观察者
*/
void notifyObservers();
}
-
具体观察者接口:
package com.lili.observer; /** * 观察者接口 * * @author: QiJingJing * @create: 2021/7/18 */ public interface Observer { /** * 更新消息 */ public void update(String message); }
-
被观察者实现:
package com.lili.observer; import java.util.ArrayList; import java.util.List; /** * 具体的被观察者对象 * * @author: QiJingJing * @create: 2021/7/18 */ public class Message implements MessageSubject { // 维护的观察者列表 private List<Observer> list = new ArrayList<>(); private String message; public void setMessage(String message) { this.message = message; notifyObservers(); } @Override public void registerObserver(Observer o) { list.add(o); } @Override public void removeObserver(Observer o) { list.remove(o); } @Override public void notifyObservers() { for (Observer observer : list) { observer.update(message); } } }
-
观察者实现:
package com.lili.observer; /** * 具体的被观察者对象 * * @author: QiJingJing * @create: 2021/7/18 */ public class User implements Observer { private String name; public User(String name) { this.name = name; } @Override public void update(String message) { System.out.println("[" + name + "]" + "收到消息:" + message); } }
-
测试代码:
package com.lili.observer; /** * @author: QiJingJing * @create: 2021/7/18 */ public class Test { @org.junit.Test public void testObserver() { // 创建一个被观察者对象 Message message = new Message(); // 创建三个观察者对象 Observer user1 = new User("lili"); Observer user2 = new User("tom"); Observer user3 = new User("vice"); message.registerObserver(user1); message.registerObserver(user2); message.registerObserver(user3); // 发出消息 message.setMessage("亲们,么么哒"); } }
运行结果:
[lili]收到消息:亲们,么么哒
[tom]收到消息:亲们,么么哒
[vice]收到消息:亲们,么么哒
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!