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

Observer模式的一个例子

阅读更多

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设计模式实例

    另一个例子是在多线程环境中,一个线程的状态变化可能需要通知其他线程,这时也可以使用Observer模式。 文件名"ObserverTest"可能表示这是一个关于Observer设计模式的测试代码。在实际编程中,这样的测试文件通常会...

    Observer例子

    在这个"Observer例子"中,我们将探讨如何在实际编程中应用Observer模式。 Observer模式的核心概念是"发布-订阅"(Publish-Subscribe)或"监听器"(Listener)模式。它包括两个主要角色:主题(Subject)和观察者...

    observer 模式例子的源码(天气监测问题)

    这是老师上课讲observer模式的Java例子,容易看懂。 题目:基于我们拥有专利的气象数据对象来提供各种气象报告(气象数据对象收集当前的气象数据,包括温度、湿度和气压)。初期要求提供三类报告:当前天气情况、...

    Observer模式代码实现

    ### Observer模式代码实现 #### 观察者模式简介 观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动...

    设计模式C++学习之观察者模式(Observer)

    观察者模式(Observer)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在C++中广泛应用,特别是在需要...

    Android observer 使用demo

    在提供的压缩包文件"SubjectObserverDemo"中,很可能包含了一个关于Observer模式的实战例子,可能涵盖了ContentObserver和BroadcastReceiver的使用,通过查看这个示例项目,你可以更深入地理解如何在Android应用中...

    委托、事件与Observer设计模式

    下面是一个简单的Observer模式实现示例: ```csharp // 定义接口,表示观察者 public interface IObserver { void Update(string message); } // 定义主题,包含观察者列表并通知它们 public class Subject { ...

    设计模式之略见一斑(Observer观察者模式)

    本篇文章将深入探讨“Observer”观察者模式,这是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 观察者模式的核心概念是主题...

    Observer(观察者模式)学习源码

    以下是一个简单的Observer模式应用示例: ```java public class Main { public static void main(String[] args) { Observable observable = new Observable(); Observer observer1 = new ConcreteObserver(...

    Observer观察者模式

    Observer观察者模式是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。这个模式的核心概念是发布-订阅,即发布者(被观察对象)向订阅者(观察者)广播事件或...

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

    该示例是翻写一老外Observer Pattern的例子,本人觉得该示例是对该模式的非常精典的说明,于是花点功夫来翻写它,因为他的代码没有注释说明该模式的设计思想怎样体现在代码中去,所以,本人结合代码注释了关键代码...

    第4讲_Observer模式

    观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。这种模式常用于维持对象间的一致性,而不会使它们过度耦合。在描述的场景中...

    观察者模式Observer

    观察者模式(Observer)是设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。这种模式在软件开发中广泛应用于事件处理和实时...

    工厂模式与观察着模式的两个例子

    观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于事件驱动编程,比如用户界面组件的事件处理。 在`...

    设计模式之Observer - 观察者模式

    观察者模式(Observer Pattern)是软件设计模式中的一种行为模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动编程或者...

    java 23种设计模式及具体例子

    * 单例模式:单例模式是一种创建型模式,它保证一个类只有一个实例,并提供一个访问该实例的全局点。 * 建造者模式:建造者模式是一种创建型模式,它提供了一种创建复杂对象的方式,而不需要指定它们的类。 * 原型...

    C++ Observer 实现

    Observer模式的主要思想是定义一个主题(Subject)类,它维护了一个观察者(Observer)列表,并提供添加、删除观察者以及通知所有观察者更新状态的方法。观察者接口包含更新自身状态的函数。当主题状态改变时,会...

    观察者模式(Observer)

    观察者模式(Observer)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态变化时通知多个“观察”该对象的其他对象。这个模式在软件工程中广泛应用于事件驱动编程,例如用户界面组件的交互或者系统状态的...

    java设计模式之Observer参考.pdf

    在给定的文件中,我们看到一个具体的Observer模式应用例子,涉及到`Product`类和两个观察者`NameObserver`和`PriceObserver`。`Product`类代表商品,具有`name`和`price`属性,并且扩展了`Observable`类。当商品的...

    设计模式-观察者模式-作业-observer.zip

    观察者模式(Observer Pattern)是软件设计模式中的行为模式之一,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式常用于实现事件驱动或发布-...

Global site tag (gtag.js) - Google Analytics