如果想要实现观察者模式,则必须依靠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的更多相关文章

  1. java中观察者模式Observable和Observer

    25.java中观察者模式Observable和Observer 如果想要实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口 观察者设计模式 现在很多的 ...

  2. 设计模式之观察者模式(Observable与Observer)

    设计模式之观察者模式(Observable与Observer) 好久没有写博客啦,之前看完了<设计模式之禅>也没有总结一下,现在回忆一下设计模式之观察者模式. 1.什么是观察者模式 简单情 ...

  3. 2017.12.25 Java中面向对象思想的深刻理解

    今日内容介绍 1.面向对象思想 2.类与对象的关系 3.局部变量和成员变量的关系 4.封装思想 5.private,this关键字 6.随机点名器 01面向对象和面向过程的思想 * A: 面向过程与面 ...

  4. Java中使用Observer接口和Observable类实践Observer观察者模式

    在Java中通过Observable类和Observer接口实现了观察者模式.实现Observer接口的对象是观察者,继承Observable的对象是被观察者. 1. 实现观察者模式 实现观察者模式非 ...

  5. Java_观察者模式(Observable和Observer)

    http://blog.csdn.net/tianjf0514/article/details/7475164/ 一.观察者模式介绍 在Java中通过Observable类和Observer接口实现了 ...

  6. Java_观察者模式(Observable和Observer) -转

    原文地址: Java_观察者模式(Observable和Observer) 一.观察者模式介绍    在Java中通过Observable类和Observer接口实现了观察者模式.一个Observer ...

  7. 十一、观察者模式(Observable、Observer)

    老板出差了,员工1.员工2..均放羊中.他们请求前台的秘书,当老板回来时通知自己,免得被Boss抓个现行.秘书想了想,说————嗯,这是观察者模式. 当一个对象的改变需要同时改变其它对象,而且它不知道 ...

  8. Java中的观察者模式

    让一个类能够被观察,则该类需要继承java.util.Observable类. 要让一个类成为观察者,则该类需要实现java.util.Observable接口. 让观察者和被观察者建立联系通过Obs ...

  9. 浅谈java中内置的观察者模式与动态代理的实现

    一.关于观察者模式 1.将观察者与被观察者分离开来,当被观察者发生变化时,将通知所有观察者,观察者会根据这些变化做出对应的处理. 2.jdk里已经提供对应的Observer接口(观察者接口)与Obse ...

随机推荐

  1. 分时间uu

    #include<stdio.h> int map[20][4]; typedef struct node{  int star;  int end; }node; node dui[10 ...

  2. kafka 安装

    kafka是一个分布式的消息缓存系统 kafka集群中的服务器都叫做broker kafka有两类客户端,一类叫producer(消息生产者),一类叫做consumer(消息消费者),客户端和brok ...

  3. 从Spring容器中获取Bean。ApplicationContextAware

    引言:我们从几个方面有逻辑的讲述如何从Spring容器中获取Bean.(新手勿喷) 1.我们的目的是什么? 2.方法是什么(可变的细节)? 3.方法的原理是什么(不变的本质)? 1.我们的目的是什么? ...

  4. 获取QQ企业邮箱通讯录PY脚本

    ':             root_department = department     regexp = r'{uin:"(\S*?)",pid:"(\S*?)& ...

  5. 18. 星际争霸之php设计模式--观察者模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  6. MSDeploy

    http://blogs.iis.net/jamescoo/default.aspx   Web Deployment Tool Now Works With Credential Store Feb ...

  7. :selected

    描述: 查找所有选中的选项元素 HTML 代码: <select> <option value="1">Flowers</option> < ...

  8. 用mysql++读写二进制

    方法1: // mysqlTest.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include <mysql++.h> #inc ...

  9. Java堆栈的应用1----------堆栈的自定义实现以及括号匹配算法的Java实现

    接下篇:http://www.cnblogs.com/fuck1/p/5995857.html 堆栈的应用1:括号匹配算法 括号匹配问题 假设算术表达式中包含圆括号,方括号,和花括号三种类型.使用栈数 ...

  10. Dynamics AX 2012 R2 客制化RDP报表参数对话框

    当我们在使用RDP报表时,AX会根据Data Contract,自动生成报表参数对话框上的字段控件.一般情况下,该对话框能够满足我们的需求,但是如果有较为复杂或特殊的需求,就要我们对该对话框进行客制化 ...