参考文献:《Java程序性能优化》.葛一鸣
代理模式也是一种常见的设计模式。它使用代理对象完成用户请求,屏蔽用户对真实对象的访问。该模式下,用户只和代理打交道,而代理需要有当事人的授权,而且一些核心问题需要请示当事人。
代理模式应用很广泛,包括安全访问,远程调用,以及延时加载等,这里主要讲一下如何实现延时加载。
以一个简单的示例来阐述一下代理模式实现延时加载的方法和意义。假设某客户端软件,有根据用户请求,去查询数据库的功能。在查询数据库之前,需要获得数据库连接,软件开启的时候,初始化系统的所有类,此时尝试获取数据库连接。当系统有大量的类似操作时(比如XML解析等),所有这些初始化操作的叠加会使得系统的启动速度变得非常缓慢。为此,采用代理模式,采用代理类,封装对数据库查询中的初始化操作,当系统启动时,初始化这个代理类,而非真实的数据库查询类,而代理类什么都没有做,因此它的构造是相当迅速的。
在系统启动时,讲消耗资源最多的方法都使用代理模式分离,就可以加快系统的启动速度,减少用户的等待时间,而在用户真正做查询操作时,再由代理类单独去加载真实的数据库查询类,完成用户的请求。这个过程就是使用代理模式实现了延时加载。
代理模式的核心思想是:如果当前并没有使用这个组件,则不需要真实的初始化它,使用一个代理类对象替代他原有的位置,只要在真正使用的时候,才对它进行加载。