设计模式 (7) - Flyweight/享元模式
2015-07-26 22:05
162 查看
问题描述
一个系统中可能创建某类型的大量实例,有什么方法可以节约内存开销呢?
享元模式
如图所示,享元模式划分对象的内部状态和外部状态,外部状态和对象的运行上下文相关;把外部状态封装成为对象的接口参数传递到对象的方法调用中。对象方法依据对象的内部状态和参数所代表的外部状态来执行相关逻辑。由于外部状态由客户计算或者保持,而内部状态又相对稳定,因此改对象的实例个数相对较少。这种对象属性的划分方法,减少了对象实例的个数。想象一下,如果对象保持内部状态和外部状态,由于外部状态的多样性,对象的实例个数相对更多。通过FlyweightFactory对象来管理对象实例并支持对象的共享,可以进一步减少内存开销。
讨论
享元模式的价值在于:划分对象的本质属性(内在属性)和外部属性,外部属性由客户维护并作为参数传入--这既保持了对象的细粒度也让对象的属性相对稳定;通过FlyweightFactory来管理对象的实例化,这使得对象共享成为可能。这些措施都可以减少系统内存开销。
一个系统中可能创建某类型的大量实例,有什么方法可以节约内存开销呢?
享元模式
如图所示,享元模式划分对象的内部状态和外部状态,外部状态和对象的运行上下文相关;把外部状态封装成为对象的接口参数传递到对象的方法调用中。对象方法依据对象的内部状态和参数所代表的外部状态来执行相关逻辑。由于外部状态由客户计算或者保持,而内部状态又相对稳定,因此改对象的实例个数相对较少。这种对象属性的划分方法,减少了对象实例的个数。想象一下,如果对象保持内部状态和外部状态,由于外部状态的多样性,对象的实例个数相对更多。通过FlyweightFactory对象来管理对象实例并支持对象的共享,可以进一步减少内存开销。
讨论
享元模式的价值在于:划分对象的本质属性(内在属性)和外部属性,外部属性由客户维护并作为参数传入--这既保持了对象的细粒度也让对象的属性相对稳定;通过FlyweightFactory来管理对象的实例化,这使得对象共享成为可能。这些措施都可以减少系统内存开销。
相关文章推荐
- No3.Longest Substring Without Repeating Characters
- Android 开源框架Universal-Image-Loader完全解析(二)--- 图片缓存策略详解
- android之我自己实现的下拉刷新
- BZOJ 1592: [Usaco2008 Feb]Making the Grade 路面修整( dp )
- QDemo - Analog clock模拟时钟学习并改进
- Linux 下编译安装 PHP 5.6
- 偶数支足球队进行单循环比赛,按照指定算法打印每轮的对阵形势
- XAMPP重要文件目录及配置
- LAMP环境搭建教程
- phaser制作跑酷游戏
- Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
- Android之——自动挂断电话的实现
- poj Map Labeler 【2-sat + 二分】【最后一道2-sat 1A好开心】
- 最小公倍数 SRM 661 Div1 250: MissingLCM
- EasyUI总结
- 设计模式之六大原则(转载)
- Java NIO:浅析I/O模型
- MIUI 7 会是小米的救命稻草吗?
- [LeetCode][Java] Binary Tree Maximum Path Sum
- C++位运算详解