zoukankan      html  css  js  c++  java
  • 动态代理模式的使用

    package 设计模式;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    //主题接口
    interface  Isubject
    {
        public void f1();
        public void f2();
    }
    class Subject implements Isubject
    {
    
        @Override
        public void f1() {
            // TODO Auto-generated method stub
            System.out.println("调用方法1");
            
        }
    
        @Override
        public void f2() {
            // TODO Auto-generated method stub
            System.out.println("调用方法2");
            
        }
    }
    //静态代理类的实现
    class  StaticProxy implements Isubject
    {
        //被代理的对象
        private Isubject real=null;
        public StaticProxy(Isubject real)
        {
            this.real =real;
        }
    
        @Override
        public void f1() {
            System.out.println("调用前处理");
            real.f1();
            System.out.println("调用后处理");
            
        }
    
        @Override
        public void f2() {
            // TODO Auto-generated method stub
            System.out.println("调用前处理");
            real.f2();
            System.out.println("调用后处理");
            
        }
        
    
    }
    class Handler implements InvocationHandler
    
    {
        private Isubject real=null; //一个实际主题
        public  Handler(Isubject real)
        {
            this.real=real;
        }
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args)
                throws Throwable {
            System.out.println("before"+method.getName());
            method.invoke(real, args);
            System.out.println("after"+method.getName());
            return null;
            
        }
    }
    
    public class 动态代理2 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            //静态代理类的测试
            Subject sub=new Subject();
            //StaticProxy sp=new StaticProxy(sub);
            //sp.f1();
            ClassLoader loader=sub.getClass().getClassLoader();//获得具体类的加载器
            Class[] interfaces=sub.getClass().getInterfaces();
            Handler h=new Handler(sub);
            Proxy proxy=(Proxy) Proxy.newProxyInstance(loader, interfaces, h);
            ((Isubject) proxy).f1();
            ((Isubject) proxy).f2();
            
            
            
            
            
            
            
    
        }
    
    }
  • 相关阅读:
    IIS和tomcat共用80端口
    CYQ.Data V5 从入门到放弃ORM系列:教程
    C#中==与Equals方法的区别
    一个简单得不能再简单的“ORM”了
    msbuild ConfuserEx.Build 加密
    C#生成注册码
    从多个XML文档中读取数据用于显示webapi帮助文档
    ASP.NET MVC SSO 单点登录设计与实现
    ASP.NET MVC Bootstrap极速开发框架
    Nodejs初阶之express
  • 原文地址:https://www.cnblogs.com/hansongjiang/p/3870460.html
Copyright © 2011-2022 走看看