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();
            
            
            
            
            
            
            
    
        }
    
    }
  • 相关阅读:
    多态
    SSM前后端分离 ssm+html+js(ajax) 这种controll层的返回值是结合或者网址
    Eclipse创建ssm项目
    在idea中创建Maven项目
    Maven的安装和配置
    IDEA修改快捷键!和一些常用的快捷键
    mysql数据库的安装和连接测试并给root用户赋密码
    ssm动态sql语句
    Java基础--JDBC
    Java基础--注解、反射
  • 原文地址:https://www.cnblogs.com/hansongjiang/p/3870460.html
Copyright © 2011-2022 走看看