代理模式与动态代理(一)
代理模式:代理模式就是用户不直接访问可以提供功能的接口,而是通过访问另外一个接口获取用户想要的结果,这样设计可以方便我们在不影响真正提供用户所需功能的接口前提下,而通过调整代理接口来实现我们功能的扩展,更加灵活。代理分为静态代理与动态代理,所谓静态代理就是代理类的类型是已经定好了,总是一句话:代理模式可以在不修改被代理对象的基础上,通过扩展代理类,进行一些功能的附加与增强。值得注意的是,代理类和被代理类应该共同实现一个接口,或者是共同继承某个类。
动态代理:动态代理顾名思义不用我们去创建代理类了,直接用Proxy这个类的newProxyInstance方法来动态创建我们的代理类,这个方法需要三个参数loader类加载器,interfaces代码要用来代理的接口,h 一个InvocationHandler对象
这里的重点就是代理类写好后,至于具体代理哪个类完全取决于测试类我们传参,根据测试类参数反射来实现动态代理,可以一个接口多种实现,也可以直接代理多个接口。
总结
- 代理分为静态代理和动态代理两种。
- 静态代理,代理类需要自己编写代码写成。
- 动态代理,代理类通过 Proxy.newInstance() 方法生成。
- 不管是静态代理还是动态代理,代理与被代理者都要实现两样接口,它们的实质是面向接口编程。
- 静态代理和动态代理的区别是在于要不要开发者自己定义 Proxy 类。
- 动态代理通过 Proxy 动态生成 proxy class,但是它也指定了一个 InvocationHandler 的实现类。
- 代理模式本质上的目的是为了增强现有代码的功能。