代理模式:为其他对象提供一种代理已控制这个对象的访问
当无法或不想直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口,
抽象主题类:该类的主要职责是声明真实主题与代理的共同接口方法,该类即可以是一个抽象类也可以是一个接口.
真实主题类:该类也称为被委托类或被代理类,该类定义了代理说表示的真实对象,有其执行具体的业务逻辑方法,而客户端则通过代理类间接地调用正式主题中定义的方法,
代理类:该类也称为委托类或代理类,该类持有一个对真实主题的引用,在其所实现的接口方法中调用真实主题类中相应的接口方法执行,以此起到代理的作用,
其主要还是一种委托机制,正式对象将方法的执行委托给代理对象.
按代码模式分为,静态代理和动态代理.,
静态代理:代理者的代码由程序员自己或一些自动化工具生成固定的代码再对其进行编译,也就是说在我们的代码运行前代理类的class编译文件就已存在.
动态代理:通过反射机制动态生成代理者的对象,也就是说我们在code阶段压根就不需要知道代理谁,代理谁我们将会在执行阶段决定, 动态代理通过一个代理类来代理N个被代理类,其实质是对代理者与被代理者进行解耦,使两者没有直接的耦合关系,
从使用范围分:
远程代理:为某个对象在不同的内存地址空间提供局部代理,使系统可以将server部分的实现隐藏,以便客户端可以不考虑server的存在
虚拟代理:使用一个代理对象表示一个十分耗资源的对象并在真正需要时才创建
保护代理:使用代理控制对原始对象的访问,该类型的代理常被用于原始对象用不同访问权限的情况
智能引用:在访问原始对象时执行一些自己的附加操作并对指向原始对象的引用计数.