• 设计模式之监听器模式


    事件处理模型:


    组件(事件源)不处理自己的事件,而是将事件处理托付给外部的处理实体(监听器,

    这样的事件处理模型称为事件的 授权处理模型。

    不同的事件,能够交由不同类型的监听器去处理


    事件源:


    提供订阅与取消监听者的方法,并负责维护监听者列表,发送事件给监听者


    监听者:


    每一个监听者实现接口来接收事件,并负责从事件源订阅与取消订阅



    图示:





    demo


    事件源:

    Context:


    package com.demo.event;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Context {
    	private static List<Listener> list=new ArrayList<Listener>();
    	public static void addListener(Listener listener){
    		list.add(listener);
    	}
    	public static void removeListener(Listener listener){
    		list.remove(listener);
    	}
    	public static void sendNotification(Event event){
    		for(Listener listener:list){
    			listener.onChange(event);
    		}
    	}
    }
    

    监听者:

    Listener

    package com.demo.event;
    
    public interface Listener {
    	public void onChange(Event event);
    }
    

    MyListener


    package com.demo.event;
    
    public class MyListener implements Listener {
    
    	@Override
    	public void onChange(Event event) {
    		switch(event.getType()){
    			case Event.INSTALLED:
    				System.out.println("do install...");
    				break;
    			case Event.STARTED :
    				System.out.println("do started...");
    				break;
    			case Event.RESOLVED :
    				System.out.println("do resolved...");
    				break;
    			case Event.STOPPED :
    				System.out.println("do stopped...");
    				break;
    			case Event.UNRESOLVED :
    				System.out.println("do unresolved...");
    				break;
    			case Event.UNINSTALLED :
    				System.out.println("do uninstalled...");
    				break;
    			default:
    				throw new IllegalArgumentException();
    		}
    	}
    
    }
    

    事件:

    package com.demo.event;
    
    public class Event {
    	public static final int INSTALLED =1; 
    	public static final int STARTED =2; 
    	public static final int RESOLVED  =3; 
    	public static final int STOPPED =4; 
    	public static final int UNRESOLVED  =5; 
    	public static final int UNINSTALLED   =6;
    	private int type ;
    	private Object source ;
    	public Event(int type, Object source) {
    		this.type = type;
    		this.source = source;
    	}
    	public int getType() {
    		return type;
    	}
    	public Object getSource() {
    		return source;
    	}
    }
    


    測试:

    package com.demo.event;
    
    public class EventTest {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		Listener listener=new MyListener();
    		//加入监听者
    		Context.addListener(listener);
    		//模拟bundle安装完毕事件触发
    		Context.sendNotification(new Event(Event.INSTALLED, new MyBundle()));
    	}
    
    }
    



  • 相关阅读:
    Objective-C method及相关方法分析
    java对象和json数据转换实现方式1-使用json-lib实现
    java中TCP传输协议
    【剑指Offer学习】【面试题27:二叉搜索树与双向链表】
    4.2.2 MINUS
    Hadoop for .NET Developers
    在命名空间下定义类型
    Android NDK课程录制完毕上线
    全然同态加密
    从golang的垃圾回收说起(下篇)
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4286667.html
Copyright © 2020-2023  润新知