观察者模式1(用JDK提供的API)

简介:

观察者模式:

被观察的类:

复制代码
 1 package cn.itcast.obserdemo;
 2 
 3 import java.util.Observable;
 4 
 5 //House是被观察的,这里直接继承java中的类库(API)Observable类
 6 public class House extends Observable {
 7     //给House类声明一个price属性
 8     private float price;
 9     
10     public House(float price){
11         this.price = price ;
12     }
13     public String toString(){
14         return "房子";
15     }
16     public float getPrice(){
17         return price;
18     }
19     
20     public void setPrice(float price){
21         super.setChanged();//通知内容已经被修改了
22         this.price = price;
23         //一旦修改,则表示价格改变,那么价格改变之后,实际上应该立即通知所有的观察者
24         super.notifyObservers(price);//通知所有的观察者已经改变.
25     }
26 }
复制代码

观察者类:

复制代码
 1 package cn.itcast.obserdemo;
 2 
 3 import java.util.Observable;
 4 import java.util.Observer;
 5 
 6 //人是观察者,实现Observer接口
 7 public class Person implements Observer{
 8     //然后要实现Observer中的一个update()方法
 9     public void update(Observable o, Object arg) {
10         //为了看下update中的各个参数代表的是什么意思,打印这两个参数
11         System.out.println(o + "****被观察的操作有变更...."+arg);
12     }
13 }
复制代码

主测试类:

复制代码
 1 package cn.itcast.obserdemo;
 2 
 3 public class TestObserver {
 4     public static void main(String[] args) {
 5         //new 一个被观察者House
 6         House h = new House(30000.0f);
 7         //new 三个观察者Person
 8         Person per1 = new Person();
 9         Person per2 = new Person();
10         Person per3 = new Person();
11         //被观察者和观察者之间建立"观察与被观察"关系
12         h.addObserver(per1);//House对象h1增加一个观察者对象per1
13         h.addObserver(per2);
14         h.addObserver(per3);
15         //让被观察者House对象house的发生变化
16         h.setPrice(60000.0f);
17     }
18 }
19     /*
20     打印的内容
21     房子****被观察的操作有变更....60000.0
22     房子****被观察的操作有变更....60000.0
23     房子****被观察的操作有变更....60000.0
24     */
复制代码

 



本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/4004529.html,如需转载请自行联系原作者
相关文章
|
1月前
|
存储 安全 Java
jdk21的外部函数和内存API(MemorySegment)(官方翻译)
本文介绍了JDK 21中引入的外部函数和内存API(MemorySegment),这些API使得Java程序能够更安全、高效地与JVM外部的代码和数据进行互操作,包括调用外部函数、访问外部内存,以及使用不同的Arena竞技场来分配和管理MemorySegment。
36 1
jdk21的外部函数和内存API(MemorySegment)(官方翻译)
|
2月前
|
安全 Java API
【性能与安全的双重飞跃】JDK 22外部函数与内存API:JNI的继任者,引领Java新潮流!
【9月更文挑战第7天】JDK 22外部函数与内存API的发布,标志着Java在性能与安全性方面实现了双重飞跃。作为JNI的继任者,这一新特性不仅简化了Java与本地代码的交互过程,还提升了程序的性能和安全性。我们有理由相信,在外部函数与内存API的引领下,Java将开启一个全新的编程时代,为开发者们带来更加高效、更加安全的编程体验。让我们共同期待Java在未来的辉煌成就!
62 11
|
2月前
|
安全 Java API
【本地与Java无缝对接】JDK 22外部函数和内存API:JNI终结者,性能与安全双提升!
【9月更文挑战第6天】JDK 22的外部函数和内存API无疑是Java编程语言发展史上的一个重要里程碑。它不仅解决了JNI的诸多局限和挑战,还为Java与本地代码的互操作提供了更加高效、安全和简洁的解决方案。随着FFM API的逐渐成熟和完善,我们有理由相信,Java将在更多领域展现出其强大的生命力和竞争力。让我们共同期待Java编程新纪元的到来!
93 11
|
2月前
|
监控 Java 大数据
【Java内存管理新突破】JDK 22:细粒度内存管理API,精准控制每一块内存!
【9月更文挑战第9天】虽然目前JDK 22的确切内容尚未公布,但我们可以根据Java语言的发展趋势和社区的需求,预测细粒度内存管理API可能成为未来Java内存管理领域的新突破。这套API将为开发者提供前所未有的内存控制能力,助力Java应用在更多领域发挥更大作用。我们期待JDK 22的发布,期待Java语言在内存管理领域的持续创新和发展。
|
2月前
|
Java API 数据处理
【Java的SIMD革命】JDK 22向量API:释放硬件潜能,让Java应用性能飙升!
【9月更文挑战第7天】 JDK 22向量API的发布标志着Java编程语言在SIMD技术领域的重大突破。这一新特性不仅释放了现代硬件的潜能,更让Java应用性能实现了飙升。我们有理由相信,在未来的发展中,Java将继续引领编程语言的潮流,为开发者们带来更加高效、更加强大的编程体验。让我们共同期待Java在SIMD技术的推动下开启一个全新的性能提升时代!
|
2月前
|
Java API 开发者
【Java字节码操控新篇章】JDK 22类文件API预览:解锁Java底层的无限可能!
【9月更文挑战第6天】JDK 22的类文件API为Java开发者们打开了一扇通往Java底层世界的大门。通过这个API,我们可以更加深入地理解Java程序的工作原理,实现更加灵活和强大的功能。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来!
|
2月前
|
Java API 开发者
【Java字节码的掌控者】JDK 22类文件API:解锁Java深层次的奥秘,赋能开发者无限可能!
【9月更文挑战第8天】JDK 22类文件API的引入,为Java开发者们打开了一扇通往Java字节码操控新世界的大门。通过这个API,我们可以更加深入地理解Java程序的底层行为,实现更加高效、可靠和创新的Java应用。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来,并积极探索类文件API带来的无限可能!
|
3月前
|
Oracle Java 关系型数据库
JDK版本特性问题之在 JDK 11 中,HTTP Client API 的特点有哪些
JDK版本特性问题之在 JDK 11 中,HTTP Client API 的特点有哪些
|
5月前
|
安全 Java API
JavaSE——常用API进阶二(5/8)-JDK 8新增的时间API,LocalDate、LocalTime、LocalDateTime
JavaSE——常用API进阶二(5/8)-JDK 8新增的时间API,LocalDate、LocalTime、LocalDateTime
49 2
|
6月前
|
Java API
【JAVA进阶篇教学】第三篇:JDK8中Stream API使用
【JAVA进阶篇教学】第三篇:JDK8中Stream API使用
下一篇
无影云桌面