[设计模式学习笔记]享元模式(FYLWEIGHT)
2015-07-04 21:23
204 查看
1、意图
运用共享技术,有效地支持大量细粒度的对象。
2、类图
3、说明
1) 关键是内部状态和外部状态的区别,内部状态存储于flyweight中,它包含了独立于flyweight场景的信息,这些信息使得flyweight可以被共享。而外部状态取决于flyweight的场景,并根据场景而变化,外部状态信息不能被共享。用户负责在必要的时候,把外部状态信息传递给flyweight。注意,
共享的是对象,不是类。
比如书中的例子,做一个文本编辑器,以ASCII编码为例,每个字符对象就是一个flyweight对象,可以被共享。而字体、文字位置等信息是外部状态。
2) UnsharedConcreteFlyweight
并非所有FlyWeight子类都被共享,在Flyweight的层次结构中,UnsharedConcreateFlyweight通常将ConcreteFlyweight的对象作为子节点。例如row,column都是UnsharedConcreteFlyweight.
3)不应直接对ConcreteFlyweight类进行实例化,而只能从FlyweightFactory得到ConcreteFlyweight对象,这样可以保证对它们进行适当的共享。
4)如果外部状态用计算得出,而非用存储,能节省更大的存储空间。
运用共享技术,有效地支持大量细粒度的对象。
2、类图
3、说明
1) 关键是内部状态和外部状态的区别,内部状态存储于flyweight中,它包含了独立于flyweight场景的信息,这些信息使得flyweight可以被共享。而外部状态取决于flyweight的场景,并根据场景而变化,外部状态信息不能被共享。用户负责在必要的时候,把外部状态信息传递给flyweight。注意,
共享的是对象,不是类。
比如书中的例子,做一个文本编辑器,以ASCII编码为例,每个字符对象就是一个flyweight对象,可以被共享。而字体、文字位置等信息是外部状态。
2) UnsharedConcreteFlyweight
并非所有FlyWeight子类都被共享,在Flyweight的层次结构中,UnsharedConcreateFlyweight通常将ConcreteFlyweight的对象作为子节点。例如row,column都是UnsharedConcreteFlyweight.
3)不应直接对ConcreteFlyweight类进行实例化,而只能从FlyweightFactory得到ConcreteFlyweight对象,这样可以保证对它们进行适当的共享。
4)如果外部状态用计算得出,而非用存储,能节省更大的存储空间。
相关文章推荐
- Xcode升级后Alcatraz失效的解决方案
- Leetcode#5 Longest Palindromic Substring
- 什么是依赖注入
- 黑马程序员——3,JAVA基础(函数,数组相关)
- 关于java Date和时区的问题
- 缓存处理
- 基于内容的图像检索引擎(以图搜图)
- UIActivityIndictorView的使用
- 隐马可夫模型:探索看不到的世界的数学工具
- 利用MAVEN打包时,如何包含更多的资源文件
- Mac入门(一)基本用法
- BZOJ 2667 cqoi2012 模拟工厂 贪心
- unity5实现数字矩阵效果实现
- 打印object对象
- Windows 消息
- 排序算法小结
- 二进制中的1的位数
- 【第一篇】Python基础
- Android自定义SwitchButton左右滑动开关按钮控件
- sync_relay_log_info