设计模式之12--代理模式

代理模式学习笔记

代理模式是常用的结构型设计模式,当无法直接访问某个对象的时候可以通过一个代理对象来间接访问。为了保证客户端使用的间接性,所访问的真实对象与代理对象需要实现相同的接口。根据使用目的可以分为保护代理、远程代理、虚拟代理、缓冲代理等。

定义:给某一个对象提供一个代理或者占位符,并由代理对象来控制对原对象的访问

如下是代理模式的结构图:

从上图中可以看出代理模式中主要有如下几个角色:

subject,它声明了真实类和代理类共同有的接口,这样子的话客户类就可以针对Subject进行编程。

Proxy代理类,代理类继承Subject类,并且含有一个真实类的引用,这样子就可以把请求转发给真实类,另外除了和真实类相同的接口外,代理类还可以增加额外的接口功能。

RealSubject真实类,真实类也是Subject类的的子类,Subject是对外接口的真正实现的地方。

具体代码实现如下:

interface Subject {
    public void Request() { };
}

class Proxy implements Subject {
    private RealSubject realSubject = new RealSubject();
    public void PreRequest() {
        /*TODO*/
    }

    public void PostRequest() {
        /*TODO*/
    }

    public void Request() {
        PreRequest();
        realSubject.Request();
        PostRequest();
    }
}

class Proxu implememnts Subject {
    public void Request() { };
}

上面的代码实现只是很简单的一种,而在现实生产中实际的代码会复杂的多。另外根据不同的使用目的和场景,代理模式还可以如下几种情况:

  1. 远程代理 为一个位于不同的地址空间的对象提供一个本地的代理对象,这个不同的地址空间可以在同一台主机中,也可以是在另外一台主机中。
  2. 虚拟代理 如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要的时候才会被真正的创建
  3. 保护代理 控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限
  4. 缓冲代理 为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些数据。
  5. 智能引用代理 当一个对象被引用时,提供一些额外的操作,例如将对象被调用的次数记录下来等。

总结:
代理模式通过增加一个代理类,能够将客户类的请求转发给真实类处理,同时将真实类的接口抽象出来成为一个抽象类,那么客户类之后就只需要针对抽象类进行编程。对于客户来说,代理类时透明的,它们不需要知道代理类的存在。

不过因为客户类的请求需要通过代理类进行中转,那么可能会造成请求处理速度变慢。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值