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

posted on   范兵  阅读(389)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· 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

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示