zoukankan      html  css  js  c++  java
  • java监听器演示样例

    监听器的原理是观察者模式。就像明星(事件源)聚拢了一群粉丝(观察者)。当明星有啥举动的时候会通过粉丝们报道出去。

    订阅信息、计算器button都是该原理的应用。

    以下写了一个监听器的小样例:


    package listener;
    import java.util.EventObject;
    /**
     * 定义事件对象,用于标记当前进行的动作。必须继承EventObject。
     * @author zyj
     *
     */
    public class StateEvent extends EventObject {


    private static final long serialVersionUID = 5323292975415079206L;

    private Enum<ActionEnum> action;

    public StateEvent(Object source, Enum<ActionEnum> action) {
    super(source);
    this.action = action;
    }


    public Enum<ActionEnum> getAction() {
    return action;
    }


    public void setAction(Enum<ActionEnum> action) {
    this.action = action;
    }

    }


    package listener;
    public enum ActionEnum {
    wake,sleep;
    }


    package listener;
    import java.util.EventListener;
    /**
     * 定义监听接口,负责监听StateEvent事件。

    必须继承EventListener。


     * @author zyj
     *
     */
    public interface StateListener extends EventListener {
    void handleState(StateEvent event);
    }



    package listener;
    public class WakeListener implements StateListener {

    @Override
    public void handleState(StateEvent event) {
    if(event.getAction() != null && event.getAction().equals(ActionEnum.wake)){
    System.out.println("你醒了。");
    }
    }

    }


    package listener;
    public class SleepListener implements StateListener {

    @Override
    public void handleState(StateEvent event) {
    if(event.getAction() != null && event.getAction().equals(ActionEnum.sleep)){
    System.out.println("你睡了!");
    }
    }

    }



    package listener;
    import java.util.ArrayList;
    import java.util.List;

    public class StateManager {
    private List<StateListener> list = new ArrayList<StateListener>();

    public boolean addListener(StateListener listener){
    if(listener == null)
    return false;
    return list.add(listener);
    }

    public boolean removeListener(StateListener listener){
    if(listener == null)
    return false;
    return list.remove(listener);
    }

    private void notifyAllListeners(StateEvent event){
    for(StateListener listener : list){
    listener.handleState(event);
    }
    }

    public void wake(){
    StateEvent event = new StateEvent(this, ActionEnum.wake);
    notifyAllListeners(event);
    }

    public void sleep(){
    StateEvent event = new StateEvent(this, ActionEnum.sleep);
    notifyAllListeners(event);
    }

    }



    package listener;
    public class ListenerTest {
    public static void main(String[] args) {
    StateManager manager = new StateManager();
    manager.addListener(new WakeListener());
    manager.addListener(new SleepListener());
    manager.wake();
    System.out.println("-----------------");
    manager.sleep();
    }
    }


  • 相关阅读:
    (原)学习ORACLE 视图
    (原)学习ORCALE 表和约束
    下班前网上搜集的方法哈哈
    (传)Visual C# WinForm中DataGrid批量删除解决之道。
    (原)学习ORCALE索引
    用于图片切割,图片压缩,缩略图的生成(转到一个好东西)
    NET 2.0 WinForm Control DataGridView 编程36计(转)
    一些常用PLSQL语句 和事务
    温故知新的经典书评《Programming C# 》中文版第4版
    我最恐惧的事情是竞争力的丧失(转)
  • 原文地址:https://www.cnblogs.com/llguanli/p/8595568.html
Copyright © 2011-2022 走看看