享元模式()
享元模式是设计模式中少数几个以提高系统性能为目的的模式之一它的核心思想是如果在一个系统中存在多个相同的对象那么只需共享一份对象的拷贝而不必为每一次使用都创建新的对象在享元模式中由于需要构造和维护这些可以共享的对象因此常常会出现一个工厂类用于维护和创建对象
享元模式对性能提升的主要帮助有两点
()可以节省重复创建对象的开销因为被享元模式维护的相同对象只会被创建一次当创建对象比较耗时时便可以节省大量时间
()由于创建对象的数量减少所以对系统内存的需求也减小这将使得GC的压力也相应地降低进而使得系统拥有一个更健康的内存结构和更快的反应速度
享元模式的主要角色由享元工厂抽象享元具体享元类和主函数几部分组成它们的功能如表所示
表 享元模式角色
基于以上角色享元模式的结构如图所示
图 享元模式类图
享元工厂是享元模式的核心它需要确保系统可以共享相同的对象一般情况下享元工厂会维护一个对象列表当任何组件尝试获取享元类时如果请求的享元类已经被创建则直接返回已有的享元类若没有则创建一个新的享元对象并将它加入到维护队列中
注意享元模式是为数不多的只为提升系统性能而生的设计模式它的主要作用就是复用大对象(重量级对象)以节省内存空间和对象创建时间
享元模式的一个典型应用是在SAAS系统中SAAS即Software As A Service是目前比较流行的一种软件应用模式
以一个人事管理系统的SAAS软件为例假设公司甲乙丙均为这个SAAS系统的用户则定义每个公司为这套系统的一个租户每个公司(租户)又各有个员工如果这些公司的所有员工都可以登录这套系统查看自己的收入情况并且为了系统安全每个公司(租户)都拥有自己独立的数据库为了使系统的设计最为合理在这种情况下便可以使用享元模式为每个租户分别提供工资查询的接口而一个公司(租户)下的所有员工可以共享一个查询(因为一个租户下所有的员工数据都存放在一个数据库中它们共享数据库连接)这样系统只需要个享元实例就足以应付个员工的查询请求了系统的结构如图所示
图 享元模式的示例
返回目录Java程序性能优化让你的Java程序更快更稳定
编辑推荐
Java程序设计培训视频教程
JEE高级框架实战培训视频教程
JME移动开发实战教学视频
Visual C++音频/视频技术开发与实战
Oracle索引技术
ORACLEG数据库开发优化指南