最近在看spring-modules源码,看到其使用的一个重要的设计模式:回调模式
后来想想做一个简单例子吧,一方面熟悉一下,另一方面可以作为以后参考什么的。
//回调使用的接口
public interface CallBack {
public Object doInContext(Object obj) throws Exception;
}
//通过调用一个上述接口,实现一下动态代码
public class Context {
public Object execute(final CallBack callback) throws Exception{
System.out.println(Context.class + " start run ...");
return callback.doInContext("ni hao");
}
}
//我们来调用一下看看
public class Main {
/**
* @Title: main
* @Description: TODO
* @param @param args
* @result void
* @throws
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
Context context = new Context();
String str = (String)context.execute(new CallBack(){
public Object doInContext(String str) throws Exception{
return str;
}
});
System.out.println("str="+str);
}
}
执行结果:
class jbpm.test.Context start run ...
str=ni hao
个人觉得回调方式,只是为了提供动态实现的接口,后来我有衍生了一种方式:
//抽象类
public abstract class AbstractContext {
public Object execute(Object obj) throws Exception{
// add coding
return doService(obj);
}
protected abstract Object doService(Object obj) throws Exception;
}
//抽象类实现
public class RealContext extends AbstractContext{
@Override
protected Object doService(Object obj) throws Exception {
// TODO Auto-generated method stub
return obj + " doService";
}
}
//调用
public class Main {
/**
* @Title: main
* @Description: TODO
* @param @param args
* @result void
* @throws
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
RealContext real = new RealContext();
System.out.println(real.execute("ni hao!"));
}
}