25、java中观察者模式Observable和Observer
如果想要实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口
观察者设计模式
现在很多的购房者都在关注着房子的价格变化,每当房子价格变化的时候,所有的购房者都可以观察得到。
实际上以上的购房者就是观察者,他们所关注的房价就是被观察者

其中要求,被观察者需要继承Observable类,观察则需要实现Observer接口
具体实现如下
房价的实现
 class House extends Observable{
     private double price;
     public House(double price){
         this.price=price;
     }
     public double getPrice(){
         return price;
     }
     public void setPrice(double price){
         if(this.price!=price){
             this.price=price;
             setChanged();  //标注价格已经被更改
             this.notifyObservers(price);  //通知观察者数据已被更改
         }
     }
     @Override
     public String toString() {
         return "当前房价为:"+price;
     }
 }
购房者实现
 class HousePriceObserver implements Observer{
     private String name;
     public  HousePriceObserver(String name) {
         this.name=name;
     }
     @Override
     public void update(Observable o, Object arg) {
         //这里最好判断一下通知是否来自于房价,有可能来自其它地方
         if(o instanceof House){
             System.out.println("购物者"+name+ "观察到房价已调整为:"+arg);
         }
     }
 }
运行
House house=new House(10000);
HousePriceObserver A=new HousePriceObserver("A");
HousePriceObserver B=new HousePriceObserver("B");
HousePriceObserver C=new HousePriceObserver("C");
house.addObserver(A);
house.addObserver(B);
house.addObserver(C);
System.out.println(house);
house.setPrice(6000);
house.setPrice(8000);
运行结果为:
当前房价为:10000.0
购物者C观察到房价已调整为:6000.0
购物者B观察到房价已调整为:6000.0
购物者A观察到房价已调整为:6000.0
购物者C观察到房价已调整为:8000.0
购物者B观察到房价已调整为:8000.0
购物者A观察到房价已调整为:8000.0
25、java中观察者模式Observable和Observer的更多相关文章
- java中观察者模式Observable和Observer
		25.java中观察者模式Observable和Observer 如果想要实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口 观察者设计模式 现在很多的 ... 
- 设计模式之观察者模式(Observable与Observer)
		设计模式之观察者模式(Observable与Observer) 好久没有写博客啦,之前看完了<设计模式之禅>也没有总结一下,现在回忆一下设计模式之观察者模式. 1.什么是观察者模式 简单情 ... 
- 2017.12.25 Java中面向对象思想的深刻理解
		今日内容介绍 1.面向对象思想 2.类与对象的关系 3.局部变量和成员变量的关系 4.封装思想 5.private,this关键字 6.随机点名器 01面向对象和面向过程的思想 * A: 面向过程与面 ... 
- Java中使用Observer接口和Observable类实践Observer观察者模式
		在Java中通过Observable类和Observer接口实现了观察者模式.实现Observer接口的对象是观察者,继承Observable的对象是被观察者. 1. 实现观察者模式 实现观察者模式非 ... 
- Java_观察者模式(Observable和Observer)
		http://blog.csdn.net/tianjf0514/article/details/7475164/ 一.观察者模式介绍 在Java中通过Observable类和Observer接口实现了 ... 
- Java_观察者模式(Observable和Observer) -转
		原文地址: Java_观察者模式(Observable和Observer) 一.观察者模式介绍 在Java中通过Observable类和Observer接口实现了观察者模式.一个Observer ... 
- 十一、观察者模式(Observable、Observer)
		老板出差了,员工1.员工2..均放羊中.他们请求前台的秘书,当老板回来时通知自己,免得被Boss抓个现行.秘书想了想,说————嗯,这是观察者模式. 当一个对象的改变需要同时改变其它对象,而且它不知道 ... 
- Java中的观察者模式
		让一个类能够被观察,则该类需要继承java.util.Observable类. 要让一个类成为观察者,则该类需要实现java.util.Observable接口. 让观察者和被观察者建立联系通过Obs ... 
- 浅谈java中内置的观察者模式与动态代理的实现
		一.关于观察者模式 1.将观察者与被观察者分离开来,当被观察者发生变化时,将通知所有观察者,观察者会根据这些变化做出对应的处理. 2.jdk里已经提供对应的Observer接口(观察者接口)与Obse ... 
随机推荐
- [troubleshoot][archlinux][X] GPU HANG
			前言:如下内容已经是在hang完大概半个多月后了,当时想写,一直没过来写,写blog果然也是已经花费时间的事情. 最近一直在休假,电脑的使用频率也不多.后来还是为了生活,不情愿的去开始上班了,上班的第 ... 
- 关于ios8模拟器不能输入中文问题以及软键盘不弹出问题
			在Xcode菜单栏中 Product->scheme->Edit Scheme->Options->Application Region改为中国,就可以输入中文了, 如果软 ... 
- ERROR 2006 (HY000) at line xx: MySQL server has gone away 解决方法
- 如何用ajax提交多组同样的数据(数组)到后台?
			我在AJAX中这样写 $("#subbutton").click(function(){ var machineCode_1=$("#machineCo ... 
- mongoose index
			1. 当应用程序启动时,Mongoose会自动为模式中的每个定义的索引调用ensureIndex. 虽然很好用于开发,但建议在生产中禁用此行为,因为索引创建可能会导致显着的性能影响. 通过将模式的au ... 
- Elasticsearch + logstash中文指南
			http://kibana.logstash.es/content/logstash/examples/nginx-access.html http://es.xiaoleilu.com/030_Da ... 
- 20151208_使用windows2012配置weblogic节点管理器
			经过实践,weblogic节点管理器的作用主要有两点: 1.可通过weblogic控制台远程控制被管server启停. 2.可以自动重启被管server的进程,并且对spring框架提供比直接启动更快 ... 
- 史上最全的SpringMVC学习笔记
			SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ... 
- TextBox
			一.聚焦: private void FrmOnlineChargeMoney_Paint(object sender, PaintEventArgs e) { edtAuthCode.SelectA ... 
- 新知识:Java 利用itext填写pdf模板并导出(昨天奋战到深夜四点,知道今天两点终于弄懂)
			废话少说,不懂itext干啥用的直接去百度吧. ***************制作模板******************* 1.先用word做出界面 2.再转换成pdf格式 3.用Adobe Acr ... 
