代理模式

代理模式:

1.静态代理

//抽象主题角色
 interface Subject{
   //定义一个方法
   public void request();
 }
 //具体主题角色
 class realSubejct implements Subject{
  //实现方法
  public void request(){
  Syso("简单实现.......");
  }
 }
 //代理主题角色
 class Proxy implements Subejct{
  //要代理那个实现类
  private Subject subject=null;
  //默认被代理者
  public proxy(){
   subject=new RealSubject();//在构造函数中创建被代理对象
  }
  //通过构造中传递被代理者
  public Proxy(Subject _subject){
   subject=_subject;
  }
  //实现接口中定义的方法
  public void request(){
   before();
   subject.request();
   after();
  }
  //预处理
  private void before(){
  Syso("使用预处理...");
  }
  //善后处理
  private void after(){
   Syso("善后处理....");
  }
 }

2.动态代理

//抽象主题角色
interface Subject{
 //定义一个方法
 public void request();
}
//具体主题角色
public class RealSubject implements Subject{

    @Override
    public void request() {
        System.out.println("小勇吃shi中.....");
    }

}
public class Subjecthandler implements InvocationHandler{
   //声明呗代理对象
    private Subject subject;
    public Subjecthandler(Subject _subject){
        subject=_subject;
    }
    //委托处理方法
    @Override
    public Object invoke(Object proxy, Method method, Object[] args)
            throws Throwable {
        //预处理
        System.out.println("吃饭准备中.....");
        Object obj = method.invoke(subject, args);
        System.out.println("吃饭结束.....");
        return obj;
    }
}
public class Client {
    public static void main(String[] args) {
        // 具体主题角色
        Subject subject = new RealSubject();
        // 代理实例的处理Handler
        InvocationHandler handler = new Subjecthandler(subject);
        // 当前加载器
        ClassLoader cl = subject.getClass().getClassLoader();
        // 动态代理
        Subject proxy = (Subject) Proxy.newProxyInstance(cl, subject.getClass()
                .getInterfaces(), handler);
        // 执行主题角色方法
        proxy.request();
    }
}

动态代理很容易实现通用的代理类,只要在Invocationhandler的invoke方法
中读取持久化数据即可实现,而且还能实现动态切入的效果,这也是AOP编程事项.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值