Java 中的 Observer
:
Java 提供了 Observer 模式的默认实现,下面我们就看一下 Java 对 观察者模式的支持。
Java 对 观察者模式的支持 主要体现在 Observable
类和 Observer
接口。
(1) Observable
类代表 被观察者 (java.util.Observable
)
主要方法有:
void setChanged()
: 设置被观察者的状态已经被改变
void addObserver(Observer observer)
: 添加观察者
int countObservers()
: 返回所有观察者的数目
void deleteObserver(Observer observer)
:删除指定观察者
void deleteObservers()
: 删除所有观察者
boolean hasChanged()
: 被观察者的状态是否被改变,如果是则返回true,否则返回false
void notifyObservers()
: 通知所有观察者(没有参数)
void notifyObservers(Object arg)
: 通知所有观察者(带参数,参数一般设定为被改变的属性)
void clearChanged()
:清除被观察者状态的改变(即调用 hasChanged() 时会返回 false)
(2) Observer
接口代表 观察者 (java.util.Observer
)
它只有一个抽象方法需要被具体的观察者类实现(很重要
):
void update(Observable observable, Object arg)
:当 被观察者 调用
notifyObservers(*)
方法
时,会根据被观察者的
hasChanged()
方法 来判断 它的状态是否被改变, 如果被观察者的状态被改变了,则
会调用 观察者 的
update
方法,参数
observable
为 被观察者对象,
arg
为调用
notifyObservers(
Object arg
)
时传入的参数
arg
,如果调用的是
notifyObservers()
方法,
则
arg
为 null(
注意
:应该把这个参数
arg
设定为 被观察者的 被改变的属性)。
下面是一个实例:
被观察者 是 一个商品,当它的价格被改变后,就会通知相应的关注此商品的 客户(观察者)。
1,Good
类:商品类,继承了 Observable
类。
class Good extends Observable{
private String name;
private float price;
public Good(String name, float price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public float getPrice() {
this.notifyObservers(price);
return price;
}
public void setPrice(float price) {
this.price = price;
/*
* 注意 :在通知 所有观察者之前
* 一定要调用 setChanged()方法来设置被观察者的状态已经被改变,
*/
this.setChanged();
/*
* notifyObservers 方法在通知完所有吗 观察者 后,
* 会自动调用 clearChanged 方法来清除 被观察者 的状态改变。
*/
this.notifyObservers(price);
}
}
2,Customer
类:客户类,实现了 Observer
接口。
public class Customer implements Observer{
private String name;
public Customer(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void update(Observable observable, Object arg) {
if(observable instanceof Good && arg instanceof Float){
System.out.println("客户<"+this.name+"> : "+((Good)observable).getName()+"的价格变了,"+arg+"元了 !");
}
}
}
3,Test
测试类:
public class Test {
public static void main(String[] args){
Good good = new Good("洗衣粉",3.5f);
Customer tom = new Customer("Tom");
Customer jerry = new Customer("Jerry");
good.addObserver(tom);
good.addObserver(jerry);
good.setPrice(2.5f);
good.setPrice(3.0f);
}
}
运行 Test
类,输出如下:
客户<Jerry> : 洗衣粉的价格变了,2.5元了 !
客户<Tom> : 洗衣粉的价格变了,2.5元了 !
客户<Jerry> : 洗衣粉的价格变了,3.0元了 !
客户<Tom> : 洗衣粉的价格变了,3.0元了 !
分享到:
相关推荐
该示例是翻写一老外Observer Pattern的例子,本人觉得该示例是对该模式的非常精典的说明,于是花点功夫来翻写它,因为他的代码没有注释说明该模式的设计思想怎样体现在代码中去,所以,本人结合代码注释了关键代码的...
设计模式之观察者模式ObserverPattern
java设计模式之Observer参考.pdf
这是最简单的一个MVC实例,通过它你可以了解MVC的基本工作原理。
java设计模式之Observer[整理].pdf
主要介绍了Java设计模式之观察者模式(Observer模式)介绍,Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解,需要的朋友可以...
Java内置的Observable类和Observer接口提供了基本的观察者模式功能,你可以通过继承Observable类和实现Observer接口来使用
主要介绍了Java编程的Observer观察者设计模式,观察者模式定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象,需要的朋友可以参考下
观察者模式,实现了表示层和数据逻辑的分离。在观察目标和观察者之间建立一个抽象的耦合
在浏览器和节点环境中工作,支持AMD模块定义和RequireJS(因此, Observer对象作为模块公开)。 这个模块是为我自己的使用而创建的,但是我决定共享它。 为什么还要再实施 这样的模块已经有很多实现,例如良好的 ...
结合微信公众号讲解观察者模式,生动形象,关键是上手快啊
JDK里提供的observer设计模式的实现由java.util.Observable类和 java.util.Observer接口组成。从名字上可以清楚的看出两者在Observer 设计模式中分别扮演的角色:Observer是观察者角色,Observable是被观察目标...
100.在 Java 中,什么叫观察者设计模式(observer design pattern)? 101.使用工厂模式最主要的好处是什么?在哪里使用? 102.举一个用 Java 实现的装饰模式(decorator design pattern)?它是作用于对象层次还是类...
股票的价格随着时间会在一定范围内波动,对于每个股票,股票分析软件提供多种指标分析,如分时图,K线图等,以辅助投资者进行... 提示:股价变动用随机数模拟:java.util.Random,用一个线程模拟股票行情数据的产生。
Head First模式设计用的是Java,实现观察者模式使用C++
首先介绍了Java中面向对象特性和技术,逐个分析Abstract Factory;Builder;Prototype;Singleton;Adapter (对象);Bridge;Composite;Decorator;Facade;Flyweight;Proxy;Iterator;Observer等模式
测试环境CDH 5.1.0HBase 0.98ElasticSearch 1.5.0使用Maven打包mvn clean compile assembly:single部署请参照:
import java.util.Observer; import java.util.Observable; import java.text.NumberFormat; import javax.swing.*; import Controller.TextController; import Model.Sphere; import java.awt.*; import java....
这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...
观察者模式Observer: 以手机号码为例,老师的手机号码存在学生的手机里,若老师的手机号改变,她会发一条短信通知每个学生自己手机号变了