zoukankan      html  css  js  c++  java
  • 观察者模式

    个人博客

    http://www.milovetingting.cn

    观察者模式

    模式介绍

    观察者模式是一个使用率非常高的模式。它最常用的地方是GUI系统,订阅-发布系统。

    模式定义

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

    使用场景

    关联行为场景

    事件多级触发场景

    跨系统的消息交换场景,如消息队列、事件总线的处理机制

    简单实现

    定义被观察者

    public class ObservableImpl extends Observable {
    
    	public void notifyChanged() {
    		// 标识状态或者内容发生改变
    		setChanged();
    		// 通知所有观察者
    		notifyObservers();
    	}
    
    }
    

    定义观察者

    public class ObserverImpl implements Observer {
    
    	private String name;
    
    	public ObserverImpl(String name) {
    		super();
    		this.name = name;
    	}
    
    	@Override
    	public void update(Observable arg0, Object arg1) {
    		System.out.println(name + ":收到更新通知");
    	}
    
    }
    

    调用

    public static void main(String[] args) {
    		ObservableImpl observable = new ObservableImpl();
    		ObserverImpl observer1 = new ObserverImpl("observer1");
    		ObserverImpl observer2 = new ObserverImpl("observer2");
    		observable.addObserver(observer1);
    		observable.addObserver(observer2);
    		observable.notifyChanged();
    	}
    

    输出结果

    observer2:收到更新通知
    observer1:收到更新通知
    

    可以看到,通知时是按照注册时的逆序来通知的,查看源码:

    for(int i = aobj.length - 1; i >= 0; i--)
                ((Observer)aobj[i]).update(this, obj);
    
  • 相关阅读:
    java 分解质因数
    Unix 文件系统读写时权限校验
    find 命令实战巧用
    Linq分组功能
    三种查看SqlServer中数据物理pge页的方法
    一个高度压缩的bit位图字典的实现
    windbg 命令 gchandles
    ManualResetEvent和AutoResetEvent的区别实例
    一些汇编指令(基于8086)
    windbg sos版本不匹配问题解决
  • 原文地址:https://www.cnblogs.com/milovetingting/p/12207957.html
Copyright © 2011-2022 走看看