zoukankan      html  css  js  c++  java
  • java的静态代理和2种动态代理(未完,待续)


    package
    com.liubingfei.test.proxy.staticproxy; /** * @author LiuBingFei * @desc 接口,定义抽象方法:卖房子,出租房子。 * @date 2020/3/5 22:09 * @return */ public interface house { //卖房子 public abstract void sell_house(); //出租房子 public abstract void rental_house(); }
    package com.liubingfei.test.proxy.staticproxy;
    
    /**
     * @author LiuBingFei
     * @desc
     * @date 2020/3/5 22:12
     * @return
     */
    public class house_owner implements house{
        @Override
        public void sell_house() {
            System.out.println("房主卖房子");
        }
    
        @Override
        public void rental_house() {
            System.out.println("房主出租房子");
        }
    }
    package com.liubingfei.test.proxy.staticproxy;
    
    /**
     * @author LiuBingFei
     * @desc
     * @date 2020/3/5 22:14
     * @return
     */
    public class house_proxy implements house {
        //房主
        private house_owner owner;
    
        public house_proxy(house_owner owner) {
            this.owner = owner;
        }
    
        @Override
        //调用房主卖房子
        public void sell_house() {
            owner.sell_house();
        }
    
        @Override
        //调用房主出租房子
        public void rental_house() {
            owner.rental_house();
        }
    }
    package com.liubingfei.test.proxy.staticproxy;
    
    import org.junit.Test;
    
    /**
     * @author LiuBingFei
     * @desc
     * @date 2020/3/5 22:19
     * @return
     */
    public class static_proxy {
        @Test
        //静态代理:房产中介house_proxy代理房主house_owner卖房子
        //静态代理:代理类和被代理类,实现同样的接口或者继承同样的父类。在程序运行前就编译好,叫做静态代理。
        public void proxy() {
            house_proxy proxy = new house_proxy(new house_owner());
            proxy.sell_house();
            proxy.rental_house();
        }
    }

     

    package com.liubingfei.test.proxy.dynamicproxy.jdk_proxy;
    
    /**
     * @author LiuBingFei
     * @desc 接口,定义抽象方法:卖房子,出租房子。
     * @date 2020/3/5 22:09
     * @return
     */
    public interface House {
        //卖房子
        public abstract void sell_house();
        //出租房子
        public abstract void rental_house();
    }
    package com.liubingfei.test.proxy.dynamicproxy.jdk_proxy;
    
    /**
     * @author LiuBingFei
     * @desc
     * @date 2020/3/5 22:12
     * @return
     */
    public class House_owner implements House{
        @Override
        public void sell_house() {
            System.out.println("房主卖房子");
        }
    
        @Override
        public void rental_house() {
            System.out.println("房主出租房子");
        }
    }
    package com.liubingfei.test.proxy.dynamicproxy.jdk_proxy;
    
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    /**
     * @author LiuBingFei
     * @desc
     * @date 2020/3/5 22:48
     * @return
     */
    public class House_proxy implements InvocationHandler {
        private House house;
    
        public House_proxy(House house) {
            this.house = house;
        }
    
        /**
         * Proxy.newProxyInstance(param1, param2, param3)
         * param1: ClassLoader对象;
         * param2: 被代理类的接口数组,因为代理底层要根据接口生成;
         * param3:参数类型是InvocationHandler即可,this即是当前类,它实现了这个接口。
         * @return 返回一个代理类
         */
        public Object getProxy(){
            Object proxy = Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[]{House.class}, this);
            return proxy;
        }
    
        /**
         *
         * @param proxy 代理对象,就是房产中介
         * @param method 代理对象中的方法
         * @param args 代理对象中的参数
         * @return
         * @throws Throwable
         */
        @Override
        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
            Object invoke = method.invoke(house, args);
            System.out.println("中介收取中介费");
            return invoke;
        }
    }
    package com.liubingfei.test.proxy.dynamicproxy.jdk_proxy;
    
    import org.junit.Test;
    
    /**
     * @author LiuBingFei
     * @desc
     * @date 2020/3/5 23:14
     * @return
     */
    public class Jdk_proxy {
        @Test
        public void proxy() {
            //传入被代理类,创建动态代理类的对象。
            House_proxy house_proxy = new House_proxy(new House_owner());
            //获得代理类,强转成接口类型。
            House house = (House) house_proxy.getProxy();
            //使用多态的向下造型
            house.sell_house();
            house.rental_house();
        }
    }

  • 相关阅读:
    markdown syntax
    solidity_mapping_implementation
    paramiko 模块安装和使用
    检测服务运行的脚本
    系统非正常关机启动后出现:an error occurred during the file system
    bacula 备份恢复
    socket 网络编程
    Python 8 协程/异步IO
    Linux系统通过console口连接交换机
    Python 7 多线程及进程
  • 原文地址:https://www.cnblogs.com/liubingfei/p/12424010.html
Copyright © 2011-2022 走看看