java中观察者模式Observable和Observer
如果想要实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口
观察者设计模式
现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房者都可以观察得到。
实际上以上的购房者就是观察者,他们所关注的房价就是被观察者
其中要求,被观察者需要继承Observable类,观察则需要实现Observer接口
具体实现如下
房价的实现
1 class House extends Observable{ 2 private double price; 3 public House(double price){ 4 this.price=price; 5 } 6 public double getPrice(){ 7 return price; 8 } 9 public void setPrice(double price){ 10 if(this.price!=price){ 11 this.price=price; 12 setChanged(); //标注价格已经被更改 13 this.notifyObservers(price); //通知观察者数据已被更改 14 } 15 } 16 @Override 17 public String toString() { 18 return "当前房价为:"+price; 19 } 20 }
购房者实现
1 class HousePriceObserver implements Observer{ 2 private String name; 3 public HousePriceObserver(String name) { 4 this.name=name; 5 } 6 @Override 7 public void update(Observable o, Object arg) { 8 //这里最好判断一下通知是否来自于房价,有可能来自其它地方 9 if(o instanceof House){ 10 System.out.println("购物者"+name+ "观察到房价已调整为:"+arg); 11 } 12 } 13 }
运行
1 House house=new House(10000); 2 HousePriceObserver A=new HousePriceObserver("A"); 3 HousePriceObserver B=new HousePriceObserver("B"); 4 HousePriceObserver C=new HousePriceObserver("C"); 5 house.addObserver(A); 6 house.addObserver(B); 7 house.addObserver(C); 8 System.out.println(house); 9 house.setPrice(6000); 10 house.setPrice(8000);
运行结果为:
当前房价为:10000.0
购物者C观察到房价已调整为:6000.0
购物者B观察到房价已调整为:6000.0
购物者A观察到房价已调整为:6000.0
购物者C观察到房价已调整为:8000.0
购物者B观察到房价已调整为:8000.0
购物者A观察到房价已调整为:8000.0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix