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

定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。

Observer模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。

java提供Obeservable类和Observer接口。

比如购房,购房者是观察者,而房价是被观察者,房价的变化是被观察者所关注的。

/**
 * 被观察者
 * @author soyoungboy
 *
 */
public class House extends Observable {
    //房价
    private float price;

    public House(float price) {
        this.price = price;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        //设置变化点
        super.setChanged();
        //通知观察者,价格发生变化
        super.notifyObservers(price);
        this.price = price;
    }

    @Override
    public String toString() {
        return "House [price=" + price + "]";
    }

}
/**
 * 房价观察者
 * @author soyoungboy
 *
 */
public class HouseObserver implements Observer {
    //购房者名称
    private String name;

    public HouseObserver(String name) {
        this.name = name;
    }
    @Override
    public void update(Observable o, Object arg) {
        if (arg instanceof Float) {
            System.out.println("name 观察到房价变化为:"+((Float)arg).floatValue());
        }
    }
}
public class Test {

    public static void main(String[] args) {
        House house = new House(10000);
        HouseObserver houseObserver = new HouseObserver("购房者A");
        HouseObserver houseObserver1 = new HouseObserver("购房者B");
        HouseObserver houseObserver2 = new HouseObserver("购房者C");
        //添加房价的监听者
        house.addObserver(houseObserver);
        house.addObserver(houseObserver1);
        house.addObserver(houseObserver1);
        System.out.println(house.toString());
        house.setPrice(20000);
        System.out.println(house.toString());
        house.setPrice(30000);
        System.out.println(house.toString());
    }

}

结果为:

House [price=10000.0]
name 观察到房价变化为:20000.0
name 观察到房价变化为:20000.0
House [price=20000.0]
name 观察到房价变化为:30000.0
name 观察到房价变化为:30000.0
House [price=30000.0]
时间: 2024-08-02 06:04:38

设计模式--观察者设计模式的相关文章

iOS常用设计模式——观察者设计模式

观察者设计模式详解 观察者设计模式详解 基本概念 NSNotificationCenter的使用 添加监听 接收消息 删除监视 KVO的使用 基本概念 注册观察者 观察者对象发生变化时的回调方法 remove观察者身份 代码实现 基本概念 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己.而在IOS开发中我们可能会接触到的经典观察者模式的实现方式,有这么几种:NSNotificationCen

JAVA设计模式——观察者设计模式和Reactor反应堆设计模式

被观察者(主题)接口 定义主题对象接口 /**抽象主题角色: 这个主题对象在状态上发生变化时,会通知所有观察者对象 也叫事件对象 */ public interface Subject { //增加一个观察者 public void addWatcher(Watcher watcher); //删除一个观察者 public void removeWatcher(Watcher watcher); //通知所有的观察者 public void notifyWatchers(String str);

观察者设计模式

/** * 事件接口即被观察者 * * @author Host * */ publicinterface Event { void attach(Listener listener); void detach(Listener listener); void notifyListener(); } /** * 事件监听者观察者 * * @author Host * */ publicinterface Listener { void execute(); } 事件源的一个实现类(磁盘事件) p

(java)从零开始之--观察者设计模式Observer

观察者设计模式:时当一个对象发生指定的动作时,要通过另外的对象做出相应的处理. 步骤: 1. A对象发生指定的动作是,要通知B,C,D...对象做出相应的处理,这时候应该把B,C,D...对象针对A对象的动作做出的相应处理方法定义在接口上(这是一种规范,凡事需要A对象通知的对象,都要实现该接口). 2. 在A对象维护接口的引用,当A对象发生指定的动作这时候即可调用接口中的方法. 观察者模式的应用场景: 1. 对一个对象状态的更新,需要其他对象同步更新,而且其他对象的数量动态可变. 2.对象仅需要

监听器和 利 用观察者设计模式设计一个程序

一.监听器概念 1.事件源:发生事件的对象. 2.监听器:是一个接口,监听事件源上要发生的动作 3.事件:事件对象一般是作为监听器方法的参数存在的,它封装了发生事件的对象 二.Servlet中提供的监听器(8个) 八个监听器分类: 2.1监听ServletContext.HttpSession.ServletRequest对象的创建和销毁的监听器. ServletContextListener:监听ServletContext对象的创建和销毁. HttpSessionListener:监听Htt

观察者设计模式 Vs 事件委托(java)

观察者设计模式 Vs 事件委托 转载请注明原博客地址: http://blog.csdn.net/gdutxiaoxu/article/details/51824769 源码下载地址: http://download.csdn.net/detail/gdutxiaoxu/9567209 本篇博客主要讲解一下几个问题 什么是观察者模式 观察者模式的优缺点 如何看待观察者模式的缺点 事件的委托 什么是观察者模式 简单来说,当有多个观察者想同时观察同一个主题对象的时候,当主题对象的 状态发生变化,观察

设计模式: 自己手动实现一个观察者设计模式

观察者模式: 定义了对象之间的一对多依赖,这样一来.当一个对象(被观察者)改变状态时,它的全部依赖者(观察者)都会收到通知并自己主动更新. 在观察者模式中,会改变的是主题的状态,以及观察者的数目和类型. 用这个模式, 你能够改变依赖主题状态的对象.却不必改变主题.这叫提前规划. 主题和观察者都使用接口:观察者利用主题的接口向主题注冊.而主题利用观察者的接口通知观察者.这样能够让两者之间运作正常,有同一时候具有松耦合的长处. 观察者模式利用"组合"将很多观察者组合进主题中.对象之间的这样

PHP设计模式-观察者

PHP设计模式-观察者 一个对象状态发生改变后,会影响到其他几个对象的改变,这时候可以用观察者模式.一个对象通过添加一个attach方法允许观察者注册自己,使本身变得可观察.当被观察的对象更改时,它会将消息发送到已注册的观察者.观察者使用该信息执行的操作与被观察的对象无关.观察者模式是一种事件系统,意味着这一模式允许某些类通过观察被观察类的状态变化,做出相应的动作. 观察者模式UML图 php5中提供了观察者observer与被观察者subject接口 interface SplSubject

JS观察者设计模式:实现iframe之间快捷通信

观察者设计模式又称订阅发布模式,在JS中我们习惯叫做广播模式,当多个对象监听一个通道时,只要发布者向该通道发布命令,订阅者都可以收到该命令,然后执行响应的逻辑.今天我们要实现的就是通过观察者设计模式,实现iframe之间的通信. 一.top对象 一般的JS书里都会在讲框架集的时候讲top,这会让人误解,认为top对象只是代表框架集,其实top的含义应该是说浏览器直接包含的那一个页面对象,也就是说如果你有一个页面被其他页面以iframe的方式包含了,无论包含的层级是什么,都可以用top访问最外层的