import java.util.Observable;
import java.util.Observer;
/**
* 一个观察者观察多个被观察者
* @author zengst
* @date
*/
public class ObserverTest {
public static void main(String args[]){
BeingWatched2 bw2 = new BeingWatched2();
BeingWatched1 bw1 = new BeingWatched1();
Watch w = new Watch();
bw2.addObserver(w);
bw1.addObserver(w);
bw2.counter2();
bw1.counter1();
}
}
class Watch implements Observer{
//这里的args是被观察者调用notifyObservers方法时传递的参数
//这里的o是被观察者的父类,因为一个观察者可以观者多个被观察者
//所以这里无法直接通过o调用某一个被观察者定义的方法
@Override
public void update(Observable o, Object arg) {
if(o instanceof BeingWatched2){
BeingWatched2 w = (BeingWatched2) o;
System.out.println("我是第二个被观察者"+arg);
System.out.println("################"+w.cry());
System.out.println("@@@@@@@@@@@@@@@@"+o.toString());
}else if(o instanceof BeingWatched1){
BeingWatched1 w = (BeingWatched1) o;
System.out.println("我是第一个被观察者"+arg);
System.out.println("################"+w.cry());
System.out.println("@@@@@@@@@@@@@@@@"+o.toString());
}
}
}
class BeingWatched2 extends Observable{
public int j =888;
public int cry(){
System.out.println("I am crying--"+j);
return j;
}
void counter2(){
try{
for(int i=0; i<5;i++){
setChanged();
notifyObservers(i+"第二个被观察者");
Thread.sleep(1000);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
class BeingWatched1 extends Observable{
public int j =999;
public int cry(){
System.out.println("I am crying--"+j);
return j;
}
void counter1(){
try{
for(int i=0; i<5;i++){
setChanged();
notifyObservers(i+"第一个被观察者");
Thread.sleep(1000);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
相关推荐
在Java中,观察者模式的实现通常依赖于`java.util.Observable`类和`java.util.Observer`接口。`Observable`类代表被观察的对象,而`Observer`接口则是观察者的接口。以下是对这两个关键组件的详细解释: 1. `...
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件...
- **顺序问题**:通知观察者时,可能会有特定的执行顺序要求,但观察者模式本身无法保证。 - **过多的通知**:如果不恰当使用,可能导致观察者收到过多不必要的通知。 **源码实现** 在Java中,`java.util....
本文将介绍如何在频繁模式挖掘中应用观察者模式,并结合Apriori算法,利用Java编程语言和设计模式来实现一个高效、可扩展的数据挖掘项目。 数据频繁模式挖掘的目的是从大量事务数据中发现频繁出现的项集或模式。这...
在Java中,`java.util.Observable`和`java.util.Observer`类提供了内置的观察者模式支持。而在Python等其他语言中,可以通过自定义类来实现观察者模式。 以`ObserverTest`为例,这可能是一个测试用例,用于验证观察...
观察者设计模式观察者模式(有时又被称为发布-订阅模式、模型-视图模式、源-收听者模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时...
本资源主要涵盖了三种经典的设计模式:策略模式、工厂方法模式以及观察者模式,对于初学者来说是非常有价值的学习资料。 **策略模式**是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式中,一个类的...
观察者模式是一种软件设计模式,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。 Java 中通过 Observable 类和 Observer 接口实现了观察者模式。 在 Java 中,观察者模式可以...
- **直接融合**:应用客户端本身就是观察者,两者合二为一,确保了最快速的事件响应。 - **推方式**(Push):观察者检测到事件后立即通过消息推送至应用客户端,主动传递事件信息。 - **拉方式**(Pull):应用...
* 观察者模式:观察者模式是一种行为型模式,它可以将对象之间的关系建立在观察者和被观察者之间,以便于更好地实现对象之间的关系。 * 迭代子模式:迭代子模式是一种行为型模式,它可以将对象之间的关系建立在迭代...
在Java中,`java.util.Observable`和`java.util.Observer`接口就是观察者模式的体现。 4. **装饰器模式**:动态地给一个对象添加一些额外的职责,增加功能而不影响其他对象。在Java IO流中,`BufferedReader`、`...
观察者模式定义了对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。观察者模式主要包含两个角色:被观察对象(Subject)和观察者(Observer)。Subject维护一...
行为型模式主要处理对象间的交互和责任分配,包括策略模式(Strategy)、观察者模式(Observer)和模板方法模式(Template Method)等。 本教程的"05最佳实践"部分可能涵盖了如何在实际项目中有效应用这些设计模式...
行为型模式则包括责任链模式、命令模式、观察者模式等,它们主要用于规定对象之间的交互方式,以及如何在运行时分配职责,提高系统的灵活性和可扩展性。 在解答这些习题的过程中,读者需要深刻理解每种模式的适用...
该模式通常涉及到两类对象:`Subject`(主题)和`Observer`(观察者)。 - **Subject**(主题):持有观察者的列表,并在状态发生变化时通知所有观察者。 - **Observer**(观察者):订阅主题的变化,当主题状态...
3. **行为型模式**:包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录模式(Memento)、观察者模式...
- **观察者模式**:利用Java内置的Observable和Observer类轻松实现。 - **装饰者模式**:通过继承实现,可以在运行时为对象添加职责。 #### 结论 设计模式是软件开发中不可或缺的一部分,尤其在Java这样的面向对象...
行为型模式着重于对象之间的责任分配,包括策略模式(Strategy)、观察者模式(Observer)、命令模式(Command)等。策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互相替换,让算法独立于使用它的...