• 设计模式10——动态代理模式


    设计模式10——动态代理模式

    代码实现:

    package com.ghl.dynammicproxy;
    
    /**
     * @ProjectName DesignPattern
     * @ClassName Rent
     * @Date 2020/8/29 20:57
     * @Author gaohengli
     * @Version 1.0
     */
    //动态代理模式
    //租房
    public interface Rent {
    
        public void rent();
    }
    
    package com.ghl.dynammicproxy;
    
    /**
     * @ProjectName DesignPattern
     * @ClassName Host
     * @Date 2020/8/29 20:58
     * @Author gaohengli
     * @Version 1.0
     */
    //房东
    public class Host implements Rent {
        @Override
        public void rent() {
            System.out.println("房东要出租房子");
        }
    }
    
    package com.ghl.dynammicproxy;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    /**
     * @ProjectName DesignPattern
     * @ClassName ProxyInvocationHandler
     * @Date 2020/8/29 21:45
     * @Author gaohengli
     * @Version 1.0
     */
    //自动生成代理类
    public class ProxyInvocationHandler implements InvocationHandler{
    
        //被代理的接口
        private Rent rent;
    
        public void setRent(Rent rent) {
            this.rent = rent;
        }
    
        //生成得到的代理类
        public Object getProxy(){
            return Proxy.newProxyInstance(this.getClass().getClassLoader(),rent.getClass().getInterfaces(),this);
        }
    
        //处理代理实例,并返回运行结果
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            //动态代理的本质,就是使用反射机制实现
            seeHose();
            Object result = method.invoke(rent, args);
            heotong();
            return result;
        }
    
        private void seeHose(){
            System.out.println("中介带你看房子");
        }
    
        private void heotong(){
            System.out.println("中介带你签合同");
        }
    }
    
    package com.ghl.dynammicproxy;
    
    /**
     * @ProjectName DesignPattern
     * @ClassName Client
     * @Date 2020/8/29 22:03
     * @Author gaohengli
     * @Version 1.0
     */
    //客户端租房
    public class Client {
        public static void main(String[] args) {
            //真实对象
            Host host = new Host();
    
            //代理角色:现在没有
            ProxyInvocationHandler pih = new ProxyInvocationHandler();
            //通过调用程序处理角色来处理我们要调用的接口对象
            pih.setRent(host);
            //动态生成代理类
            Rent proxy = (Rent) pih.getProxy();
            proxy.rent();
    
        }
    }
    

  • 相关阅读:
    多元隐函数组求导快速判断自变量和因变量
    jQuery通过ajax方法获取json数据不执行success的原因及解决方法
    JS对于字符串的切割截取
    PHPStorm 解决报错:com.mysql.cj.exceptions.InvalidConnectionAttributeException
    点击checkbox后,$(this).attr('checked')得到的值不会发生改变
    phpstudy等php本地环境运行缓慢的问题解决方法
    HTML5跳转页面并传值以及localStorage的用法
    Js与jQuery的相互转换
    PhpStorm代码编辑区竖线的用途以及如何去掉
    PhpStorm 运行出现502 Bad Gateway
  • 原文地址:https://www.cnblogs.com/ghlz/p/13583787.html
Copyright © 2020-2023  润新知