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元了 !
分享到:
相关推荐
Java中Observer接口和Observable类就是这种模式的体现。 7. **装饰器模式**:动态地给一个对象添加一些额外的职责。Java的IO流类库就大量使用了装饰器模式,如BufferedInputStream和DataInputStream。 8. **适配器...
该示例是翻写一老外Observer Pattern的例子,本人觉得该示例是对该模式的非常精典的说明,于是花点功夫来翻写它,因为他的代码没有注释说明该模式的设计思想怎样体现在代码中去,所以,本人结合代码注释了关键代码的...
9. **观察者模式**:Java中Observer接口和Observable类实现了观察者模式,用于实现对象间的依赖关系,当一个对象的状态改变时,所有依赖于它的对象都会得到通知。源代码可能包含订阅和发布事件的例子。 10. **...
在"Java类库observer和Observable"的上下文中,`Observer`和`Observable`是Java标准库中的接口和类,它们实现了观察者模式,这是MVC模式中的一个重要组成部分。观察者模式允许一个对象(观察者)注册到另一个对象...
Java中Observer接口就是为此设计的。 15. **责任链模式**:避免请求发送者和接收者之间的耦合,将多个处理者对象链接在一起,形成一条链,请求沿链传递,由适当的处理者处理。 每个模式都有其特定的适用场景,理解...
Java中Observer和Observable类用于实现此模式。 14. **命令模式**:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。 15. **访问者模式**...
- **观察者模式**:了解Java中Observer和Observable类的应用。 - **装饰者模式**:理解如何在不改变原有类的情况下增加功能。 6. **网络编程** - **Socket通信**:理解TCP和UDP协议,能编写简单的客户端和服务端...
在Java中,`java.util.Observable`类和`java.util.Observer`接口提供了对观察者模式的内置支持。`Observable`类代表被观察的对象,它可以添加、删除观察者,并在状态改变时通知它们。`Observer`接口则定义了观察者...
在Java中,Observer模式主要通过java.util.Observable和java.util.Observer接口来实现。Observable类代表被观察的对象,Observer接口定义了观察者的基本行为。当Observable对象的状态发生变化时,会调用Observer接口...
Java中Observer和Observable接口就是观察者模式的实现。 23. **中介者模式**:用一个中介对象协调一组对象之间的交互,降低对象间的耦合性。 以上23种设计模式是软件开发中的基础工具,理解并熟练运用它们,可以...
在Java中,Observer模式通过`java.util.Observable`和`java.util.Observer`接口实现。 在给定的文件中,我们看到一个具体的Observer模式应用例子,涉及到`Product`类和两个观察者`NameObserver`和`PriceObserver`。...
Observer设计模式,也被称为“发布-订阅”(Publish-Subscribe)模式或“依赖倒置”模式,是软件设计中的一种行为模式。...在Java、C#、Python等面向对象语言中,都有内置的Observer支持,使得实现这一模式更加便捷。
在这个场景中,我们将讨论如何在Java中应用Observer模式,特别是在电子商务系统中的应用。 Observer模式的核心思想是定义一个一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象的状态发生变化...
观察者模式(Observer Pattern)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式常用于实现事件驱动的系统或者...
观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,属于Java设计模式的重要组成部分。这个模式定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动...
在Android开发中,Observer模式是一种常见的设计模式,用于实现对象之间的通信和状态更新。Observer模式的核心思想是"一对多"的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。...
5. **事件处理**:Java Swing中的事件模型基于Observer模式。我们可以为控件添加各种事件监听器,如ActionListener(按钮点击)、MouseListener(鼠标操作)等。例如,当用户点击"保存"按钮时,我们需要触发保存数据...
在Java中,这个模式是通过`java.util.Observable`类和`java.util.Observer`接口来实现的。 首先,我们要明白观察者模式的基本结构。在这个模式中,有两个主要的角色: 1. **主题(Subject)**:这是被观察的对象,...
在Java中,我们可以使用Java内置的`java.util.Observable`类和`java.util.Observer`接口来实现Observer模式。主题类通常继承`Observable`,而观察者则实现`Observer`接口。当主题状态改变时,调用`Observable`的`...
"java 旋转中的风扇" 一、java GUI 编程 Java GUI 编程是指使用 Java language 来开发图形用户界面的应用程序。Java GUI 程序使用 Java Foundation Classes(JFC)来提供图形用户界面组件,例如按钮、文本框、列表...