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();
            
            
            
            
            
            
            
    
        }
    
    }
  • 相关阅读:
    #include <functional>
    3.3内联函数
    如何查看内存占用和运行速度
    属性和方法的动态绑定和限制
    __slots__节约空间
    函数进阶之一等对象
    python继承之super
    python的方法VSjava方法
    python面向对象基础(三)内置方法 __xx__
    python面向对象基础(二)反射
  • 原文地址:https://www.cnblogs.com/hansongjiang/p/3870460.html
Copyright © 2011-2022 走看看