静态代理

代理模式为一个对象提供一个替身以控制对这个对象的访问,跟我们日常所说的代理类似,分为静态代理和动态代理两种。

 

静态代理:代理对象在编译时就已经创建好了,如下:

 

//该接口是对被访问者〔目标对象〕的抽象。
public interface Subject {

      String request〔〕;

}

//被访问者〔目标对象〕的具体实现类。如果你想访问某位明星,那么SubjectImpl就是你想访问的明星。
public class SubjectImpl implements Subject {
  
       public String request〔〕{
              //process logic
              return "OK";
       }
}

//被访问者的代理实现类〔代理对象〕,该类持有一个Subject接口的具体实例〔目标对象〕
public class SubjectProxy implements Subject {
      private Subject subject;
   
      SubjectProxy〔Subject subject〕{
      this.subject=subject;
}

      public String request〔〕{
             //add pre-process if necessary
             String originalResult=subject.request〔〕;
             //add post-process if necessary
             return "Proxy"+originalResult;
      }

}

//代表访问者的抽象角色
public class Client {
    public static void main〔〕{
     Subject subjectProxy=new SubjectProxy〔new SubjectImpl〕;
     subjectProxy.request〔〕;
    }
}

    

   在将请求转发给目标对象SubjectImpl之前或之后,都可以根据情况插入其他处理逻辑,比如日志处理、事务处理等〔横切逻辑〕。当系统使用这个代理对象运行的时候,原有逻辑实现和横切逻辑就完全融合到一起。

 

 

 静态代理缺陷:针对不一样的目标对象,我们要为其单独实现一个代理对象,而实际上这些代理对象所要添加的横切逻辑有可能都是一样的,比如事务处理。当系统中存在成千上百个目标对象时,我们就要为这成千上百个目标对象创建成千山白个代理对象,显然是不可能的,这就需要寻求动态代理的帮助。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值