Java设计模式——代理模式

概述

代理模式(Proxy),为其他对象提供一种代理,以控制对这个对象的访问,是一种结构类型的设计模式。在具体的使用过程中,客户端必须通过代理类才能调用幕后的被代理类的方法,完成特定的交互目的。
代理模式的UML图大致如下
代理模式UML

角色

代理模式中含有的角色为
1)抽象对象(subject)
定义了目标对象(real subject)及代理类对象(proxy)的共同接口,这样在任何使用目标对象的地方都可以使用代理对象。

2)目标对象(real subject)
定义了代理对象(proxy)所代表的真实实体。

3)代理对象(proxy)
保存一个引用,使得代理可以访问实体,并提供了一个与抽象对象的接口相同的接口,从而可以在任何时候操作目标对象;代理对象和目标对象具有统一的接口,以便可以再任何时候替代目标对象。代理对象通常在客户端调用传递给目标对象之前或者之后,执行某些操作,而非单纯的将调用传递给目标对象。

代码举例

/**
 * 角色:抽象对象
 */
public interface Subject {
    void request();
}
/**
 * 角色:目标对象
 */
public class RealSubject implements Subject {
    @Override
    public void request() {
        System.out.print("真实的请求");
    }
}
/**
 * 角色:代理对象
 */
public class Proxy implements Subject {

    //声明一个RealSubject对象,以便调用其方法
    private RealSubject realSubject; 

    @Override
    public void request() {
        if (realSubject == null) {
            realSubject = new RealSubject();
        }
        realSubject.request();
    }
}
/**
 * 客户端
 */
public class Main {
    public static void main(String[] args){
        Proxy proxy = new Proxy();
        proxy.request();
    }
}

应用场合

1)远程代理
为一个对象在不同的地址空间提供局部代表,这个样的话就可以隐藏一个对象存在于不同地址空间的试试。例如web service,我们在进行应用开发的时候,移动客户端只管调用web service进行数据交互等操作,而没有关心web service是如何提供服务的,这就是典型的远程代理。

2)虚拟代理
根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真是对象。听起来有点晦涩难懂,举个例子,就比如移动开发中的图片展示,我们经常会采用缩略图显示图像的大概信息,这样就不必任何地方都下载大的图片资源,只有在需要的时候开启大图的下载,那么这个缩略图就是原图的虚拟代理。

3)安全代理
控制真实对象的访问权限。一般应用于不同的对象对应不同的访问权限的时候。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值