您的位置:首页 > 编程语言 > Java开发

Java的代理模式和回调函数

2013-09-02 16:45 239 查看
-----------------------题记:

因为在使用HibernateCallback中遇到的疑问,所以上网查了很多资料,明白原理后发现跟代理模式很像,那么它们是怎么实现的,有什么区别和相同之处呢?

-----------------------代码:

【callback demo】

package callback;

public class Test {

public static void main(String[] args) {
//调用method方法
new Template().method(new Callback() {
//在参数列表中实现接口的方法,返回一个引用(接口不允许有构造方法,目测不是存在堆里面)
public void execute(String session) {
System.out.println(session);
}

});

}
}

//封装的环绕callback的类模板
class Template {
//执行方法中的参数
private String mySession = "I'm session";

public void method (Callback callback) {
//方法执行前
System.out.println("before");
//回调执行的方法
callback.execute(mySession);
//方法执行后
System.out.println("after");
}

}

//接口(提供需要强制实现的方法)
interface Callback {

void execute(String session);

}


【proxy demo】

package proxy;

public class Test {

public static void main(String[] args) {
//引用指向原型去do it
DoSomething doSomething = new Model();
//偷梁换柱,完成对原型的包装,引用指向代理
doSomething = new Proxy(doSomething);
//使用代理去do it
doSomething.doIt();
}

}

//原型
class Model implements DoSomething {

@Override
public void doIt() {
// TODO Auto-generated method stub
System.out.println("do it");
}

}

//代理
class Proxy implements DoSomething {

private DoSomething doSomething;
//测试使用构造注入更方便
public Proxy (DoSomething doSomething) {
this.doSomething = doSomething;
}

@Override
public void doIt() {
// TODO Auto-generated method stub
//原型do it之前
System.out.println("before");
//原型去do it
doSomething.doIt();
//原型do it之后
System.out.println("after");
}

}

//do something
interface DoSomething {

void doIt();

}


-----------------------比较:
两者都是对某原型的前后进行包装装饰,区别是callback更加灵活,每次可以实现不同的方法,而proxy更加方便,每次使用同一个方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息