码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式---动态代理模式

时间:2020-04-22 19:43:25      阅读:49      评论:0      收藏:0      [点我收藏+]

标签:throw   imp   载器   proxy   代理   hand   handle   ssl   turn   

动态代理模式:

    作用:在不改变源码的情况下,对现有的方法进行增强。
    
    代码演示;
    
    1.一个接口:
        public interface Printer {
            void print();
        }
        
    2.一个实现类:被增强类
        public class PrinterImpl implements Printer {
            public void print(){
                System.out.println("打印机打印。。。");
            }
        }
        
    3.目标代理类:实现InvocationHandler接口
        public class TargetProxy implements InvocationHandler {

            //被代理的对象
            private Object targetObject;


            /**
             *
             *   ClassLoader loader,  被代理类的类加载器
             *   Class<?>[] interfaces, 被代理类的所有接口
             *   InvocationHandler h  实现了InvocationHandler的类
             */
            public Object newProxyInstance(Object targetObject){
                this.targetObject=targetObject;
                return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
                        targetObject.getClass().getInterfaces(),
                        this); //真正的代理类
            }
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                System.out.println("日志记录");
                // obj: 调用方法的对象
                // args: 方法的参数
                method.invoke(targetObject, args);


                System.out.println("日志保存");
                return null;
            }
        }
        
    4.测试
        public class ProxyTest {
            public static void main(String[] args) {
                TargetProxy targetProxy = new TargetProxy();
                Printer printer = (Printer)targetProxy.newProxyInstance(new PrinterImpl());
                printer.print();
            }
        }
        
        
        
        
        
        
        

    

 

设计模式---动态代理模式

标签:throw   imp   载器   proxy   代理   hand   handle   ssl   turn   

原文地址:https://www.cnblogs.com/lyle-liu/p/12754867.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!