代理(Proxy)模式给某一个对象提供一个代理, 并由代理对象控制对原对象的引用。
所谓代理,就是一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,可以在客户端和目标对象之间起到中介的作用。
代理模式分为以下几种:
远程代理(Remote):为一个位于不同的地址空间的对象提供一个局域代表对象。这个不同的地址空间可以是在本机器中,也可是在另一台机器中。
虚拟代理(Virtual):根据需要创建一个资源消耗较大的对象,使得此对象只在需要时,才真正采取行动。
保护代理(Protect or Access):控制对一个对象的访问,如果需要,可以给不同用户提供不同级别的使用权限。
Cache代理:为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
防火墙代理(Firewall):保护目标,不让恶意用户接近。
同步化代理(Synchronization):使几个用户能够同时使用一个对象而没有冲突。
智能引用代理(Smart Reference):当一个对象被引用时,提供一些额外的操作,比如将对此对象调用的次数记录下来等。
代理模式的结构:
抽象角色(Subject):声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题。
代理角色(Proxy):代理主题角色内部含有对真是主题的引用,从而可以在任何时候操作真实主题对象;代理主题角色提供一个与真实主题角色相同的接口,以便可以在任何时候都可以替代真实主体;控制真实主题的应用,负责在需要的时候创建真实主题对象(和删除真实主题对象);代理角色通常在将客户端调用传递给真实的主题之前或之后,都要执行某个操作,而不是单纯的将调用传递给真实主题对象。
真实角色(RealSubject):定义了代理角色所代表的真实对象。
总结:这个代理模式从结构上来看就是 有一个抽象类,然后有一些继承的子类。 而这个代理 也是一个继承这个抽象类的一个子类,只不过里面聚合了其他子类,从而实现了 调用该代理类就可以调用其他子类,也就相当于将这个子类交给另外一个子类进行调用,实现了一个代理的过程。 那么就可以在这个代理类里面添加各种业务逻辑判断。从而在不改变子类实现的基础上扩充业务。也提高了真实子类的安全性。