`
hanlingbo2008
  • 浏览: 79982 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java语言对观察者模式的支持

阅读更多

12.1 java语言对观察者模式的支持

  

        在java语言的java.util库里面,提供一个Observable类以及Observer接口,构成java语言对观察者模式的支持。

    

         例子代码:

       

import java.util.Observer;
import java.util.Vector;
//java 库中的类,非用户定义的类,可以直接调用
public class Observable {
    private boolean changed = false;
    private Vector obs;
  
    public Observable() {
	obs = new Vector();
    }
    public synchronized void addObserver(Observer o) {
        if (o == null)
            throw new NullPointerException();
	if (!obs.contains(o)) {
	    obs.addElement(o);
	}
    }
    public synchronized void deleteObserver(Observer o) {
        obs.removeElement(o);
    }

    public void notifyObservers() {
	notifyObservers(null);
    }
    public void notifyObservers(Object arg) {
        Object[] arrLocal;
	synchronized (this) {
	    if (!changed)
                return;
            arrLocal = obs.toArray();
            clearChanged();
        }

        for (int i = arrLocal.length-1; i>=0; i--)
            ((Observer)arrLocal[i]).update(this, arg);
    }
    public synchronized void deleteObservers() {
	obs.removeAllElements();
    }
    protected synchronized void setChanged() {
	changed = true;
    }
    protected synchronized void clearChanged() {
	changed = false;
    }
    public synchronized boolean hasChanged() {
	return changed;
    }
    public synchronized int countObservers() {
	return obs.size();
    }
}

 

public interface Observer {

    void update(Observable o, Object arg);
}

 

import java.util.Observable;

public class Watched extends Observable{
    private String data = "";

    public String retrieveData(){
		  return data;
    }

    public void changeData(String data){
        if ( !this.data.equals( data) ) {
            this.data = data;
            setChanged();
        }

        notifyObservers();
    }
}

 

import java.util.Observable;
import java.util.Observer;

public class Watcher implements Observer{
   public Watcher(Watched w){
        w.addObserver(this);
    }

    public void update( Observable ob, Object arg){
        System.out.println("Data has been changed to:  '" + ((Watched)ob).retrieveData() + "'");
    }
}

 

import java.util.Observer;

public class Tester
{
	static private Watched watched;
	static private Observer watcher;

    public static void main(String[] args) {
		watched = new Watched();

        watcher = new Watcher(watched);

        watched.changeData("In C, we create bugs.");
        watched.changeData("In Java, we inherit bugs.");
        watched.changeData("In Java, we inherit bugs.");
        watched.changeData("In Visual Basic, we visualize bugs.");
    }
}

 

分享到:
评论

相关推荐

    请根据观察者模式,用Java语言设计并实现气象站程序。

    请根据观察者模式,用Java语言设计并实现气象站程序。其中,部分代码已经写好,包括: • 观察者接口 • 主题接口 • 显示板接口 • 测试程序 请在此框架下,继续完成CurrentConditionsDisplay、ForecastDisplay...

    详解Observer Pattern(观察者模式)在Java中的使用原理

    我们说学习Java应该从Swing开始,那么学习Swing最重要的思想就是对于观察者模式的理解(Observer Pattern)。因为,该设计模式在Java Swing框架中贯穿了始终。对于C#的委托、代理概念所使用的Callback(回调模式--...

    观察者模式的一个应用

    采用Java语言编写的一个观察者模式实例。观察者模式(有时又被称为模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,...

    java观察者模式demo----未使用java工具类

    观察者设计模式,java语言实现,完全自己代码实现,未使用observable和observer

    设计模式之观察者模式

    设计模式之观察者模式,java语言实现 设计模式之观察者模式,java语言实现 设计模式之观察者模式,java语言实现 设计模式之观察者模式,java语言实现

    KWIC 程序示例 事件风格 观察者模式

    KWIC 程序示例 事件风格 观察者模式的程序代码,使用的是Java语言。

    java设计模式-观察者 小案例

    用原始的java语言写的观察模式 雅典娜和圣斗士 雅典娜充当观察者

    Java设计模式 设计模式介绍

    章节介绍:1、爪哇语言结构性模式之变压器模式介绍 2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立性模式介绍 4、单态创立性模式介绍 5、单态创立性模式介绍 6、观察者模式介绍7、责任链模式 8、设计模式之...

    设计模式(JAVA语言实现)--20种设计模式附带源码PPT模板.pptx

    logo 15观察者模式:观察者接口和类、主题接口观察者模式:观察者接口和类、主题接口 设计模式(JAVA语言实现)--20种设计模式附带源码PPT模板全文共22页,当前为第16页。 logo 16迭代器模式:定义迭代器和聚集接口...

    《Java设计模式》详解

    内容包括统一建模语言基础知识、面向对象设计原则、设计模式概述、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式、适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、...

    观察者模式编写的股票分析程序

    用JAVA语言编写的一个小程序,功能是模拟股票价格波动,只是个很小的程序。。。。

    《Java设计模式》电子课件01至21章(程细柱PDF)

    内容包括统一建模语言基础知识、面向对象设计原则、设计模式概述、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式、适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、...

    观察者体系结构微博

    观察者体系结构开发的微博程序,使用JAVA语言,软件体系结构课程的实验

    java设计模式

    内容包括设计模式概述、面向对象设计原则、简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式、单例模式、适配器模式、桥接模式...录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式...

    常用设计模式java实现

    策略模式、观察者模式、装饰模式、适配器模式、单例模式、工厂方法模式、门面模式,java语言实现的例子。

    设计模式实例 装饰 工厂 桥梁 观察者

    设计模式实例,java语言开发。 包括:工厂模式,观察者模式,装饰模式和桥梁模式。

    Java设计模式 版本2

    对象间的联动——观察者模式,处理对象的多种状态及其相互转换——状态模式,算法的封装与切换——策略模式,模板方法模式深度解析,操作复杂对象结构——访问者模式,设计模式与足球,多人联机射击游戏中的设计模式...

    设计模式-7种开发语言(C#、JAVA、JavaScript、C++、Python、Go、PHP).pdf

    第十一节 观察者模式 第十二节 策略模式 第十三节 建造者模式 第十四节 适配器模式 第十五节 桥接模式 第十六节 装饰器模式 第十七节 迭代器模式 第十八节 中介者模式 第十九节 备忘录模式 第二十节 状态模式 第二十...

    JAVA23种设计模式及快捷记忆

    工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式、适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式、策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、...

Global site tag (gtag.js) - Google Analytics