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();
        }
    }
  • 相关阅读:
    使用正则表达式做代码匹配和替换
    python 简单日志框架 自定义logger
    UVa 221 Urban Elevations 城市正视图 离散化初步 无限化有限
    UVa 10562 Undraw the Trees 看图写树
    【如何学习Python课程】
    【linux端口号与PID的互相查询】
    supervisor基础一
    【logstash】安装配置

    markdown
  • 原文地址:https://www.cnblogs.com/zhaoningzyn/p/6835313.html
Copyright © 2011-2022 走看看