代理模式

来源:互联网 发布:淘宝朋友代付退款 编辑:程序博客网 时间:2024/06/05 02:35

代理模式:

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编程事项.

原创粉丝点击