• 观察者模式的简单例子


    Spring框架里边有很多Listener,对应的设计模式是观察者模式。所以写了一个小例子加深理解。
    一共3个类,被观察对象,观察者接口,观察者实现

    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 被观察对象
     * */
    public class Subject {
    	private int state;
    	
    	private List<Listener> listeners; //被观察对象持有观察者的引用
    
    	public int getState() {
    		return state;
    	}
    
    	public void setState(int state) {
    		this.state = state;
    		notifyAllListeners();
    	}
    	
    	public void addListener(Listener listener) {
    		if(null == listeners)
    			listeners = new ArrayList<>();
    		listeners.add(listener);
    	}
    	
    	//通知观察者发生了事件
    	public void notifyAllListeners() {
    		for(Listener listener : listeners) {
    			listener.update(this);
    		}
    	}
    	
    	public static void main(String[] args) {
    		Subject subject = new Subject();
    		Listener listener1 = new ListenerImpl();
    		subject.addListener(listener1);
    		subject.setState(1);
    		subject.setState(3);
    	}
    }
    
    

    观察者

    /**
     * listener监听器接口,也就是“观察者”
     * */
    public interface Listener {
    	public void update(Subject subject);
    }
    
    /**
     * listener实现
     * */
    public class ListenerImpl implements Listener{
    
    	@Override
    	public void update(Subject subject) {
    		System.out.println(this.getClass().getName() + "监听到Subject变化事件, Subject state = " + subject.getState());
    		
    	}
    
    }
    

    运行结果:

    com.wangan.observer.ListenerImpl监听到Subject变化事件, Subject state = 1
    com.wangan.observer.ListenerImpl监听到Subject变化事件, Subject state = 3
    

    简单说明:通常被观察对象需要持有它的观察者的引用,然后当对象的某些事件发生的时候(例子中是setState()),通过调用观察者开放出来的接口方法(例子中的Listener.update(subject))来通知观察者事件发生。观察者实现类里对事件做出响应的业务逻辑处理。

  • 相关阅读:
    Android 数据存储之 SQLite数据库存储
    Android 数据存储之 SharedPreferences储存
    Android 数据存储之 文件存储
    SSTABLE简介
    zookeeper原理
    改变win7驱动图标
    也谈谈拖延癌
    STM32f103之外部中断
    LPC1768/1769之CAN控制器概述(附库函数下载地址)
    Silicon C8051F340之时钟系统
  • 原文地址:https://www.cnblogs.com/lyhero11/p/15587145.html
Copyright © 2020-2023  润新知