设计模式之代理模式

代理模式(Proxy),其含义是为其他对象提供一种代理以控制对这个对象的访问。对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化。当客户向Proxy对象第一次提出请求时,proxy实例化真实的对象,并且将请求传给它,以后所有的客户请求都经由proxy传给封装了的真实对象。

其适用性:

远程代理(Remote Proxy)为一个对象在不同的地址空间提供局部代表,

虚代理(Virtual Proxy)根据需要创建开销很大的对象,

保护代理(Protection Proxy)控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的时候,

智能代理(Smart Reference)取代了简单的指针,它在访问对象时执行一些附加操作,它的典型用途包括:对指向实际对象的引用计数,这样当该对象没有引用时,可以自动释放它,当第一次引用一个持久对象时,将它装入内存,在访问一个实际对象前,检查是否已经锁定了它,以确保其他对象不能改变它。

下面是结构图:

                

由上面可以看出,其实proxy模式的结构图和装饰模式的结构很像,若要让Decorator直接维护一个指向ConcreteComponent的指针,其就实现了proxy模式。

很多情况如果因为不想让或不能让客户代码可以直接调用业务实体的时候,需要使用代理模式,这个就相当于我们在这之间加了一个中间层,间接的访问业务类。

  下面是代理模式的简单实现:

Subject.java

  package  org.designpattern.structural.proxy;
public  abstract  class Subject {
      public  abstract  void request();
}

  ConcreteSubject.java

package  org.designpattern.structural.proxy;
public  class ConcreteSubject  extends Subject{

    @Override
     public  void request() {
         System.out.println("ConcreteSubject request!");
     }

} 

  Proxy.java

package  org.designpattern.structural.proxy;
public  class Proxy {
     private Subject subject;    
     public Proxy(Subject subject){
         this.subject = subject;
    }
     public  void request(){
        System.out.println("Proxy request:");
        subject.request();
    }

} 

  上面仅仅是简单的实现,代理模式的使用有很多种,代理模式在分布式环境中常被使用到,在此注意的是远程代理只是地址空间的远程,可以是不同的进程之间。代理模式和装饰模式,适配器模式很相似,但只要记住代理模式是一个中间层的替身概念,就好理解了。

转载于:https://www.cnblogs.com/kingcucumber/p/3223950.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值