observer设计模式的java实现

原创 2004年11月04日 14:40:00

observer模式定义对象间的一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。JDK里提供的observer设计模式的实现由java.util.Observable类和java.util.Observer接口组成。从名字上可以清楚的看出两者在Observer 设计模式中分别扮演的角色:Observer是观察者角色,Observable是被观察目标(subject)角色。
下面给出一个代码示例:
package kellerdu.demo;

import java.util.*;

/**
 * <p>
 * 使用Observer模式的例子。
 * 自己的手机号码更改后,自己的朋友自动得到通知。
 *  </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class ObserverDesignPattern extends Observable {
    public ObserverDesignPattern() {
        super();
        //有两个朋友
        addFriend(new Friend("Tom"));
        addFriend(new Friend("Jerry"));
    }
   
    public void addFriend(Friend n){
        super.addObserver(n);
    }
    /**
     * 手机号码改变
     * @param l long
     */
    public void modifyPhoneNumber(final long l){
        /*
         *表明状态已经改变,不调用不会通知观察者
         */
        setChanged();
        //通知其他人自己的号码改变
        notifyObservers(new Long(l));
    }
   
    class Friend implements Observer{
        private String name;
        /**
         * @param name 朋友的姓名
         */
        public Friend(String name) {
            this.name=name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getName() {
            return name;
        }
       public void update(Observable o, Object arg) {
          if(arg instanceof Long){
              System.out.println(name+"已经知道你的手机号码改为:"+arg);
          }
       }
    }
    
   
    public static void main(String[] args) {
        ObserverDesignPattern op = new ObserverDesignPattern();
        //更改手机号码
        System.out.println("我手机号码更改为13516816888!");
        op.modifyPhoneNumber(Long.parseLong("13516816888"));
    }
}

程序运行结果:
我手机号码更改为13516816888!
Jerry已经知道你的手机号码改为:13516816888
Tom已经知道你的手机号码改为:13516816888

设计模式----Observer模式

在以下任一情况下可以使用观察者模式: 1、当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这二者封装在独立的对象中以使他们可以各自独立的改变和复用 2、当对一个对象的改变需要同时改变其他...
  • fly542
  • fly542
  • 2011年08月25日 00:00
  • 4698

[Android&Java]浅谈设计模式-代码篇:观察者模式Observer

观察者,就如同一个人,对很多东西都感兴趣,就好像音乐、电子产品、Game、股票等,这些东西的变化都能引起爱好者们的注意并时刻关注他们。在代码中,我们也有这样的一种方式来设计一些好玩的思想来。今天就写个...
  • sunjundelove
  • sunjundelove
  • 2015年07月22日 20:47
  • 977

设计模式——观察者模式(Observer)

要想正确理解设计模式,首先必须明确它是为了解决什么问题而提出来的。 设计模式学习笔记,欢迎交流。 ——Shulin 转载请注明出处:http://blog.csdn.net/zhsh...
  • u012909091
  • u012909091
  • 2014年08月20日 16:52
  • 2948

Java面向对象设计模式(十五)——观察者模式(Observer)

相关文档:Java面向对象设计模式 观察者模式(Observer)         包括这个模式在内的接下来的四个模式,都是类和类之间的关系,不涉及到继承,学的时候应该 记得归纳,记得本文...
  • u011814346
  • u011814346
  • 2017年05月08日 14:54
  • 209

设计模式 - 观察者模式(Observer Pattern) 详解

观察者模式(Observer Pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26583157 版权...
  • u012515223
  • u012515223
  • 2014年05月22日 14:37
  • 2975

浅谈JAVA设计模式之——观察者模式(Observer)

一、概述 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 二、适用性 1.当一个抽象模型有两个方面,其中一个方面依赖于另一方面。 将这二者封装...
  • l1028386804
  • l1028386804
  • 2015年05月09日 13:22
  • 1109

设计模式(行为型)之观察者模式(Observer Pattern)

观察者模式用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应。在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应...
  • yanbober
  • yanbober
  • 2015年05月04日 20:46
  • 5113

Java设计模式——观察者模式(Observer Pattern)

场景一 描述:《孙子兵法》有云:“知彼知己,百战不殆;不知彼而知己,一胜一负;不 知彼,不知己,每战必殆”,那怎么才能知己知彼呢?知己是很容易的,自己的军队嘛,很容易知道,那怎么知彼呢?安插间谍是很...
  • u012401711
  • u012401711
  • 2016年09月08日 21:33
  • 624

C#,由委托到Observer设计模式,再到事件机制

1. 什么是委托? 开始处理诸如int,bool等基本数据类型,它们是数据的类型。委托,是方法的类型。 如  int a; a可以是1,2,3,4,5......... 那么 delegate D; ...
  • u013781568
  • u013781568
  • 2014年03月01日 11:30
  • 996

设计模式总结之Observer Pattern(观察者模式)

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。...
  • cooldragon
  • cooldragon
  • 2016年08月11日 00:53
  • 952
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:observer设计模式的java实现
举报原因:
原因补充:

(最多只允许输入30个字)