`
kang
  • 浏览: 476306 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

行为模式之观察者模式Observer

阅读更多

<!----><!----> <!---->

适用场合:一个对象(被观察者)发生变化时,能自动通知其他对象(观察者)。

 

下述例子程序的对应场景:网上商店的产品价格变化时,自动通知消费者。

 

 

package com.javaeye.kang.observer;

 

import java.util.Observable;

import java.util.Observer;

 

/*

  * 观察者模式

  * Product 是被观察者, Customer 是观察者

  * Product 价格变化后,一定要让 Customer 知道

  * 目标: Product 不用关心具体通知谁, Customer 也不用关心通知是谁发出的

  */

 

// 产品类,被观察者

class Product extends Observable {

      private String name ;

      private double price ;

      public Product(String name, double price) {

            this . name = name;

            this . price = price;

      }

      // 可以用 spring 将对象注入进来

    public void setObserver(Observer observer) {

      this .addObserver(observer);

    }

      public void changePrice( double newPrice) {

            this . price = newPrice;

            // 设置变化点,表示要通知观察者

            this .setChanged();

            // 通知所有观察者,给一个消息

            this .notifyObservers ( " 通知:价格变化了!变成了 " + newPrice);

            // 此时就能够自动调用观察者的 update 方法

      }

}

 

// 顾客类,观察者

class Customer implements Observer {

      private String name ;

      public Customer(String name) {

            this . name = name;

      }

      // 参数 1 :来源于哪个对象;参数 2 :通知消息

      public void update(Observable observable, Object object) {

            System. out .println(object);

      }

}

 

public class ObserverTest {

      public static void main(String[] args) {

            Product pro = new Product( " 黄瓜 " ,12);

            Customer cus = new Customer( " 张三 " );

            // 绑定观察者和被观察者,一个被观察者可以设置多个观察者

            //pro.addObserver(cus);

            pro.setObserver(cus); // 对上面一句的小改进

            pro.changePrice(13);

      }

}

测试结果:

通知:价格变化了!变成了 13.0

 

 

观察者模式练习

场景:银行账户余额变动时,自动通知Dao对象

package com.javaeye.kang.observer;

 

import java.util.Observable;

import java.util.Observer;

 

/**

  * 观察者模式练习

  *

  */

// 账户类,被观察者

class Account extends Observable {

      private long number ;

      private int key ;

      private String name ;

      private double count ;

      public Account( long number, int key, String name, double count) {

            this . number = number;

            this . key = key;

            this . name = name;

            this . count = count;

      }

      public void setObserver(Observer observer) {

            this .addObserver(observer);

      }

      public void changeCount( double newCount) {

            this . count = newCount;

            this .setChanged();

            this .notifyObservers( " 通知:余额改变了,变成了 " + newCount);

      }

}

 

// 观察者

class AccountDao implements Observer {

      public void update(Observable observable, Object object) {

            System. out .println(object);

      }

}

 

public class TestObserver {

      public static void main(String[] args) {

            Account account = new Account(0001,1234, " 张三 " ,1000);

            AccountDao aDao = new AccountDao();

            account.setObserver(aDao);

            account.changeCount(1500);

      }

}

测试结果:

通知:余额改变了,变成了 1500.0

 

 

  • 描述: Observer模式
  • 大小: 102.9 KB
  • 描述: 方案与练习
  • 大小: 64.6 KB
分享到:
评论

相关推荐

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

    观察者模式,也被称为发布-订阅模式或事件驱动模式,是软件设计模式中的一种行为模式。这个模式的主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并...

    [行为模式]head first 设计模式之观察者模式(observer)

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

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

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

    C#面向对象设计模式纵横谈(19):(行为型模式) Observer 观察者模式 (Level 300)

    **C#面向对象设计模式纵横谈(19)**:**观察者模式**(Observer Pattern)是行为型模式的一种,它在软件工程中扮演着至关重要的角色。观察者模式是一种设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态...

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

    观察者模式(Observer)是软件设计模式中的一种行为模式,其主要目的是在对象之间建立一种松散耦合的关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式广泛应用于事件驱动...

    (行为型模式) Observer 观察者模式

    C#面向对象设计模式 (行为型模式) Observer 观察者模式 视频讲座下载

    观察者模式Observer

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

    observer观察者模式

    观察者模式(Observer Pattern)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态改变时通知多个“观察”该对象的其他对象。在软件工程中,这常用于实现事件驱动编程,使得系统能够及时响应变化。 在...

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

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

    观察者模式,Observer

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

    观察者模式(Observer)

    观察者模式(Observer)是一种行为设计模式,它允许你定义一个订阅机制,可以在对象状态变化时通知多个“观察”该对象的其他对象。这个模式在软件工程中扮演着重要角色,尤其是在事件驱动编程和发布/订阅系统中。...

    android Observer(观察者模式)_案例祥解.pdf

    观察者模式是一种行为设计模式,它定义了对象之间的一对多依赖关系,使得一个对象的状态发生变化时,所有依赖它的对象都能收到通知。 二、观察者模式的组件 1. 抽象观察者(Watcher) 抽象观察者是一个接口,定义...

    Observer观察者模式

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

    观察者(Observer)模式

    观察者模式的核心概念是主体(Subject)和观察者(Observer)。主体是被观察的对象,它维护了一个观察者列表,并提供了添加、删除观察者以及通知所有观察者的接口。观察者关注主体的状态变化,并在主体状态改变时...

    观察者模式(Observer)

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

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

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

Global site tag (gtag.js) - Google Analytics