zoukankan      html  css  js  c++  java
  • Java 动态代理详解

    package com.at221;
    
    //代理设计模式:
    
    interface ClothFactory{
        void product();
    }
    
    class NikeFactory implements ClothFactory{//被代理类:
    
        @Override
        public void product() {
            System.out.println("Nike服装很可靠");
        }
        
    }
    
    class ProxyFactory implements ClothFactory{//代理类:
    
        private NikeFactory nf;
        
        public ProxyFactory(NikeFactory nf){
            this.nf = nf;
        }
        @Override
        public void product() {
            this.nf.product();
        }
        
    }
    
    public class TestProxy {
        public static void main(String[] args) {
            NikeFactory nf = new NikeFactory();
            ProxyFactory pf = new ProxyFactory(nf);
            pf.product();
        }
    }

    下面是利用反射机制进行实现的动态代理:

     
    package com.at221;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    interface Subject{
        void show();
    }
    
    class RealSubject implements Subject{
    
        @Override
        public void show() {
            System.out.println("zhaoning,i love you!!!");
        }
        
    }
    
    class ProxySubject implements InvocationHandler{
        Object obj;
        public Object blind(Object obj){
            this.obj = obj;
            return Proxy.newProxyInstance(obj.getClass().getClassLoader(), 
                                            obj.getClass().getInterfaces(), this);
        }
    
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            Object returnVal = method.invoke(obj, args);
            return returnVal;
        }
    
    }
    
    public class TestProxy1{
        public static void main(String[] args) {
            RealSubject rs = new RealSubject();
            ProxySubject ps = new ProxySubject();
            Subject rss = (Subject)ps.blind(rs);
            rss.show();
        }
    }
  • 相关阅读:
    迁移学习综述
    分析 Kaggle TOP0.1% 如何处理文本数据
    软件工程提问回顾与个人总结
    洛谷 4219/BZOJ 4530 大融合
    洛谷 1486/BZOJ 1503 郁闷的出纳员
    【模板】文艺平衡树
    【模板】树套树(线段树套Splay)
    【模板】可持久化线段树
    【模板】可持久化平衡树
    【模板】左偏树
  • 原文地址:https://www.cnblogs.com/zhaoningzyn/p/6835313.html
Copyright © 2011-2022 走看看