本文研究的主要是Java回调函数与观察者模式的实现,具体介绍和实现代码如下。
观察者模式(有时又被称为发布(publish )-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。
其实观察者模式同前面讲过的桥梁、策略有着共同的使用环境:将变化独立封装起来,以达到最大的重用和解耦。观察者与后两者不同的地方在于,观察者模式中的目标和观察者的变化不是独立的,而是有着某些联系。
在Java中通过Observable类和Observer接口实现了观察者模式。一个Observer对象监视着一个Observable对象的变化,当Observable对象发生变化时,Observer得到通知,就可以进行相应的工作。
package com.demo.test; import java.util.Observable; import java.util.Observer; //观察者模式里面目标类维护了所有观察者的引用,而回调里面只是维护了一个引用 public class ObserverCallbackDemo { // 观察者A static class ConcreteObserverA implements Observer { @Override public void update(Observable o, Object arg) { System.out.println("ConcreteObserverA update"); } } // 观察者B static class ConcreteObserverB implements Observer { @Override public void update(Observable o, Object arg) { System.out.println("ConcreteObserverB update"); } } // 被观察对象 static class ConcreteObservable extends Observable { public void changeValue() { //protected方法只能在子类被调用 setChanged(); notifyObservers(); } } // 回调函数接口 interface ICallback { public void onCall(); } // 回调类 static class CallbackDemo { private ICallback callback; public void setListener(ICallback callback) { this.callback = callback; } public void call() { callback.onCall(); } } public static void main(String[] args) { // 观察者 ConcreteObserverA observerA = new ConcreteObserverA(); ConcreteObserverB observerB = new ConcreteObserverB(); ConcreteObservable observable = new ConcreteObservable(); observable.addObserver(observerA); observable.addObserver(observerB); System.out.println("countObservers = " + observable.countObservers()); observable.changeValue(); // 回调函数 CallbackDemo callbackDemo = new CallbackDemo(); callbackDemo.setListener(new ICallback() { @Override public void onCall() { System.out.println("callback onCall"); } } ); callbackDemo.call(); } }
输出结果:
countObservers = 2
ConcreteObserverB update
ConcreteObserverA update
callback onCall
从上面代码可以看出:回调函数应该属于观察者模式的一种,目的是为了替代轮循机制,将组件之间的耦合性降低。观察者模式里面目标类维护了所有观察者的引用,而回调里面只是维护了一个引用。
以上就是本文关于Java回调函数与观察者模式实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#cainiaojc.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。