• 使用代理模式解决延迟加载问题


    什么是代理模式?使用代理对象完成用户请求,屏蔽用户对真实对象的访问

    代理模式的应用?

    1、因为安全原因,屏蔽客户端直接访问真实对象

    2、远程调用中,需要代理类处理远程调用的技术细节

    3.使用代理类实现延迟加载,从而提升系统的性能和反应速度

    构建代理模式:

    1.主题接口,真实类和代理类的公共接口

    2.代理类,实现主体接口,代理封装真实类的调用

    3.真实类,实现主题接口,接口的具体逻辑实现

    4.客户端,使用代理类调用主题接口实现所需功能

    使用代理模式解决延迟加载问题

    /**
     * 使用代理的原因:系统启动时尽可能的少初始化
     *   ---:一般情况下,系统一启动就要加载所有的类,但是有一些类初始化的时间长,在系统启动时也没有使用它,这就导致了项目的启动缓慢
     *
     * 为了解决这一问题:
     *   -- :使用代理模式
     *      在项目初始化时,初始化代理类,使用代理类代替原有类的位置,在真正使用时才将代理类加载入内存,进行初始化
     *
     * 如何构建代理模式?
     *  --- :1、 定义一个接口,将消耗资源最多的方法抽取出来,封装成代理类和真实类的公共接口
     *        2、 真实类实现这个接口,并定方法的具体义体现,实现方法的真实逻辑
     *        3、代理类也实现这个接口,实现公共接口的方法,在方法中封装了真实对象的操作
     */
    

    主题接口类:

    /**
     * 模拟数据库的查询,代理类和真实类公共的主体接口
     */
    public interface DBQueryInteface {
        /**
        将消耗资源最多的方法抽取出来
          ---: 处理用户的查询请求
         */
        public String request();
    }
    

    真实类:

    /**
     * 真实的数据库查询类:
     * 需要进行数据库连接及语句查询工作。是一个重量级对象
     */
    public class DBQuery implements DBQueryInteface {
        /**
         * 该类是一个重量级对象,在使用时需要进行数据库连接操作
         *    ---:模拟数据库连接的时耗
         */
        public DBQuery(){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 定义了该类方法功能的真实操作
         * @return
         */
        @Override
        public String request(){
            return "request string";
        }
    }
    

    代理类:

    /**
     * 数据库查询代理类
     */
    public class DBProxyQuery implements DBQueryInteface {
        /**
         * 轻量级对象,DBQuery在使用时才加载
         */
        DBQuery dbQuery = null;
    
        /**
         * 与真实类实现同一个接口和同一个抽象方法,在抽象方法中创建真实类,调用真实类的方法实现逻辑
         */
        @Override
        public String request() {
            if(dbQuery == null) {
                dbQuery = new DBQuery();
            }
            return dbQuery.request();
        }
    }
    

    客户端调用类:

    /**
     * 使用代理的原因:系统启动时尽可能的少初始化
     *   ---:一般情况下,系统一启动就要加载所有的类,但是有一些类初始化的时间长,在系统启动时也没有使用它,这就导致了项目的启动缓慢
     *
     * 为了解决这一问题:
     *   -- :使用代理模式
     *      在项目初始化时,初始化代理类,使用代理类代替原有类的位置,在真正使用时才将代理类加载入内存,进行初始化
     *
     * 如何构建代理模式?
     *  --- :1、 定义一个接口,将消耗资源最多的方法抽取出来,封装成代理类和真实类的公共接口
     *        2、 真实类实现这个接口,并定方法的具体义体现,实现方法的真实逻辑
     *        3、代理类也实现这个接口,实现公共接口的方法,在方法中封装了真实对象的操作
     */
    public class Client {
        public static void main(String[] args) {
            /**
            系统一启动,先加载代理类,使用代理类代替真实类的原有位置
             */
            DBQueryInteface dbQueryInteface = new DBProxyQuery(); //该类为轻量级对象,加载速度快
    
            /**
             * 当使用到该类的功能时才加载真实类
             */
            dbQueryInteface.request();
        }
    }
    金麟岂能忍一世平凡 飞上了青天 天下还依然
  • 相关阅读:
    ubuntu没有权限(不能)创建文件夹(目录)
    在ubuntu下安装KDE以及完全卸载KDE
    RadASM的主题更换!
    RadASM的测试工程!
    RadASM的测试工程!
    汇编工具安装三:已经配置好的汇编开发工具!
    汇编工具安装三:已经配置好的汇编开发工具!
    OSI 七层模型和 TCP/IP 四层模型 及 相关网络协议
    LwIP
    神秘的40毫秒延迟与 TCP_NODELAY
  • 原文地址:https://www.cnblogs.com/Auge/p/11552065.html
Copyright © 2020-2023  润新知