正 文

用Java动态代理来创建包装器


www.7dspace.com  更新日期:2006-1-9 5:19:15  七度空间


Java 1.3引入了名为“动态代理类”(Dynamic Proxy Class)的新特性,利用它可为“已知接口的实现”动态地创建包装器(wrapper)类。1.3版本问世以前,当我首次听说当时正在提议的动态代理类时,还以为它只是一种用来吸引人的眼球的特性。虽然把它包括到语言中是一件好事,但我却想不出它有任何实际用处。带着这一成见,我试着用动态代理写了一个示例程序,却惊讶于它的巨大威力,并当即决定把它放到我的工具箱中,以便在将来的项目中使用。此后,我不断体验到它的好处,它总是能用正确的方法来做你想要做的事情!

假如没有动态代理

深入探索动态代理类之前,先来看看在某些情况下,假如没有动态代理类会是什么样子:

public interface Robot {
    void moveTo(int x, int y);
    void workOn(Project p, Tool t);
}
 
public class MyRobot implements Robot {
    public void moveTo(int x, int y) {
        // stuff happens here
    }
    public void workOn(Project p, Tool t) {
        // optionally destructive stuff happens here
    }
}

上述代码展示了一个名为Robot的接口,以及该接口的一个名为MyRobot的大致的实现。假定你现在想拦截对MyRobot类发出的方法调用(可能是为了限制一个参数的值)。

public class BuilderRobot implements Robot {
    private Robot wrapped;
    public BuilderRobot(Robot r) {
        wrapped = r;
    }
    public void moveTo(int x, int y) {
        wrapped.moveTo(x, y);
    }
    public void workOn(Project p, Tool t) {
        if (t.isDestructive()) {
            t = Tool.RATCHET;
        }
        wrapped.workOn(p, t);
    }
}

4页,页码:[1] [2] [3] [4] 

上一篇:用JGraph轻松表示图形数据
下一篇:Blog设计的7个趋势
作者:  来源:开发者在线 ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐