码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA回调机制和观察者模式实例分享

时间:2016-09-08 14:37:20      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

回调函数在JAVA中使用频繁,比如Swing可视化编码中的监听事件等等,一般回调函数都是,通过某一个方法的执行,自动调用回调对象的回调方法,比如,有一个接口,里面有一个方法onNotify(),这个方法是一个回调方法,表明当触发事件发生时候,该调用的方法,举个例子:

一个回调接口

/**
 *  @author minliangzhi
 *  @date 2016年9月8日
 */
public interface ICallBack {
    
    void onNotify();
}

一个具体的实体对象,会出发回调函数的执行:

/**
 *  @author minliangzhi
 *  @date 2016年9月8日
 */
public class Task {
    private ICallBack callBack;
    
    public Task(ICallBack callBack) {
        this.callBack = callBack;
    }
    
    public void doSomething() {
        callBack.onNotify();
    }
}

具体的使用方法为:

    public static void main(String[] args) {
        new Task(new ICallBack() {
            
            @Override
            public void onNotify() {
                System.out.println("我是回调方法");
            }
        }).doSomething();
    }

通过调用实体对象的方法,就会触发回调函数对象的回调方法,我们这里只是简单的使用了一个匿名类的方法提供了回调对象。

 

由此,我们可以分析下观察者模式的具体含义和一般实现:

观察者模式可以分成两部分,一部分是发布者,一部分是观察者,发布者的某些方法,会通知所有的观察者,让他们知晓发布者的发布信息。

观察者:

/**
 *  @author minliangzhi
 *  @date 2016年9月8日
 */
public interface Observer {

    void onNotify(String content);
}

public class Mike implements Observer {

    @Override
    public void onNotify(String content) {
        System.out.println("Mike get : " + content);
    }
}

public class Bob implements Observer {

    @Override
    public void onNotify(String content) {
        System.out.println("Bob get : " + content);
    }

}

上述定义了两个观察者,下面定义一个发布消息者:

/**
 *  @author minliangzhi
 *  @date 2016年9月8日
 */
public interface Publisher {

    /**
     * 注册一个观察者
     * @param observer
     */
    void registObserver(Observer observer);
    
    /**
     * 移除一个观察者
     * @param observer
     */
    void removeObserver(Observer observer);
    
    /**
     * 通知所有的观察者
     */
    void notifyAllObserver();
}

一个具体的实现类,工作发布者Hunter:

/**
 *  @author minliangzhi
 *  @date 2016年9月8日
 */
public class Hunter implements Publisher {

    private List<Observer> observer;
    
    private String jobContent;
    
    public void setJob(String content) {
        this.jobContent = content;
    }
    
    public Hunter() {
        this.observer = new ArrayList<Observer>();
    }

    @Override
    public void registObserver(Observer observer) {
        this.observer.add(observer);
    }

    @Override
    public void removeObserver(Observer observer) {
        this.observer.remove(observer);
    }

    @Override
    public void notifyAllObserver() {
        for(Observer ob : observer) {
            ob.onNotify(jobContent);
        }
    }
}

使用方法:

    public static void main(String[] args) {
        /** 构造发布者和观察者,并注册 */
        Hunter hunter = new Hunter();
        Observer bob = new Bob();
        Observer mike = new Mike();
        hunter.registObserver(bob);
        hunter.registObserver(mike);
        /** 发布消息,通知所有观察者 */
        hunter.setJob("JAVA");
        hunter.notifyAllObserver();
    }

 

JAVA回调机制和观察者模式实例分享

标签:

原文地址:http://www.cnblogs.com/anivia/p/5852738.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!