代理模式的定义
为其他对象提供一种代理以控制对这个对象的访问
代理模式的使用场景
当无法或不想直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现同一个接口
根据代理类生成的时间不同可以分为静态代理和动态代理两种
静态代理
静态代理中的代理类和委托类会实现同一接口
在程序运行之前,代理类就已经存在了。
- 1个静态代理 只服务1种类型的目标对象
- 协调调用者和被调用者,降低了系统的耦合度
- 代理对象作为客户端和目标对象之间的中介,起到了保护目标对象的作用
- 在目标对象较多的情况下,若采用静态代理,则会出现 静态代理对象量多、代码量大,从而导致代码复杂的问题
动态代理
动态代理类实现了InvocatuonHandler接口,并通过反射机制动态的生成代理者的对象,具体如下:
Proxy.newProxyInstance(loader, interfaces,invocationHandler)
- 1.通过为Proxy类指定类加载器对象 和 一组接口,从而创建动态代理类的字节码;再根据类字节码创建动态代理类
- 2.通过反射机制获取动态代理类的构造函数(参数类型 = 调用处理器接口类型)
- 3.通过动态代理类的构造函数 创建 代理类实例
在程序运行时,代理类才产生。
- 只需要1个动态代理类就可以解决创建多个
- 相比静态代理中 直接调用目标对象方法,动态代理则需要先通过java反射机制 从而 间接调用目标对象方法,所以效率低
网友评论