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 ...
随机推荐
- 在winform中添加普通右键菜单
显示水平滚动条:点击GridControl的Run Designer在弹出的对话框中选择Views,将右侧属性窗口中OptionsView下的ColumnAutoWidth设置成false: 可以选择 ...
- sql server中sql语句中单引号怎么转义?【转】
sql server有两个转义符: ' 默认情况下, '是字符串的边界符, 如果在字符串中包含', 则必须使用两个', 第1个'就是转义符 另一个转义符是" 当SET QUOTED_IDEN ...
- Day12~13(2016/2/1~2/2)
进度:实现了自定义标题栏控件并调用
- RESTful使用
测试工具: JMeter 可以使用JMeter对HTTP REST接口进行测试 Java RESTful框架: Jersey
- LightOj 1197 - Help Hanzo(分段筛选法 求区间素数个数)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1197 题意:给你两个数 a b,求区间 [a, b]内素数的个数, a and b ( ...
- ios数据库常用sql语句
SQlite常用语句 由于sql语句在程序代码中以字符串的形式存在,没有代码提示,不细心很容易出错,而且不容易被查出来.sql语句字符串是单引号. 写sql语句的时候一定要细心呀.如果写不好可以找公司 ...
- iOS:给Git仓库上传代码时,超过100M会被拒绝(例如github和oschina)
处理GitHub不允许上传大于100M文件问题?本人也遇到这个坑... 来自转载,原文链接:http://www.cnblogs.com/qmmq/p/4604862.html 1.报错: 自己的项目 ...
- for循环求交集
for循环方式求交集 #!/usr/bin/env python #coding:utf-8 #取交集 #定义两个序列对象,求alist与blist对象的交集元素 alist = [2,9,3,4,5 ...
- EF CodeFirst 如何通过配置自动创建数据库<当模型改变时>
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本篇为进阶篇,也是弥补自己之前没搞明白的地方,惭愧 ...
- 【实践】jQuery实现三联联动
网上看过很多关于联动的jq或js代码,最近班上的前端大神教了我一种比网上还简单的jq联动方法,自己琢磨过之后确实比其他方法更简单更简洁所以在这里分享一下 先上html代码 <div id=&qu ...