代理分为静态代理和动态代理两种。 静态代理,代理类需要自己编写代码写成。 动态代理,代理类通过 Proxy.newInstance() 方法生成。 不管是静态代理还是动态代理,代理与被代理者都要实现两样接口,它们的实质是面向接口编程。 静态代理和动态代理的区别是在于要不要开发者自己定义 Proxy 类。 动态代理通过 Proxy 动态生成 proxy class,但是它也指定了一个 InvocationHandler 的实现类。 代理模式本质上的目的是为了增强现有代码的功能。