【设计模式】代理模式

代理模式

  • 代理模式的定义
    • 为其他对象提供一种代理以控制对这个对象的访问
  • 在这里插入图片描述
    • Proxy:代理对象
      • 实现与具体的目标对象一样的接口,这样就可以使用代理来代替具体的目标对象。保存一个指向具体目标对象的引用,可以在需要的时候调用具体的目标对象。可以控制对具体目标对象的访问,并可以负责创建和删除它
    • Subject:目标接口,定义代理和具体目标对象的接口,这样就可以在任何使用具体目标对象的地方使用代理对象
    • RealSubject:具体的目标对象,真正实现目标接口要求的功能
    /*
    * 抽象的目标接口,定义具体的目标对象和代理公用的接口
    * */
    public interface Subject {
        /*
        * 示意方法:一个抽象的请求方法
        * */
        public void request();
    }
    
    /*
    * 具体的目标对象,是真正被代理的对象
    * */
    public class RealSubject implements Subject {
        @Override
        public void request() {
            // 具体执行的功能处理
        }
    }
    
    /*
    * 代理对象
    * */
    public class Proxy implements Subject {
        /*
        * 持有被代理的具体的目标对象
        * */
        private RealSubject realSubject;
        /*
        * 构造方法,传入被代理的具体的目标对象
        * @param realSubject是被代理的具体的目标对象
        * */
        public Proxy(RealSubject realSubject) {
            this.realSubject = realSubject;
        }
    
        @Override
        public void request() {
            // 在转调具体的目标对象前,可以执行一些功能处理
    
            // 转调具体的目标对象的方法
            realSubject.request();
    
            // 转调具体的目标对象后,可以执行一些功能处理
        }
    }
    
    
  • 代理模式的功能
    • 代理模式是通过创建一个代理对象,用这个代理对象去代表真实的对象,客户端得到这个代理对象后,对客户端并没有什么影响,就跟得到了真实对象一样来使用
    • 正是因为有代理对象夹在客户端和被代理的真实对象中间,相当一个中转,那么在中转的时候就可以进行一些操作,例如判断权限
  • 代理的分类
    • 虚代理:根据需要来创建开销很大的对象,该对象只有在需要的时候才会被真正创建
    • 代理远程:用来在不同的地址空间上代表同一个对象,这个不同的地址空间可以是在本机上,也可以在其他机器上。在Java里面最典型的就是RMI技术
    • copy-on-write代理:在客户端操作的时候,只有对象确实改变了,才会真正的拷贝(或克隆)一个目标对象,算是虚代理的一个分支
    • 保护代理:控制对原始对象的访问,如果有需要,可以给不同的用户提供不同的访问权限,以控制他们对原始对象的访问
    • Cache代理:为那些昂贵操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果
    • 防火墙代理:保护对象不被恶意用户访问和操作
    • 同步代理:使多个用户能同时访问目标对象而没有冲突
    • 智能指引:在访问对象时执行一些附加操作,比如,对指向实际对象的引用计数、第一次引用一个持久对象时,将它装入内存等
  • 代理模式的特点
    • 代理模式的本质
      • 控制对象访问
    • 何时选用代理模式
      • 需要为一个对象在不同的地址空间提供局部代表的时候,可以使用远程代理
      • 需要按照需要创建开销很大的对象的时候,可以使用虚代理
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值