Flyweight
1 意图:运用共享技术有效地大量支持细粒度的对象
2 动机:flyweight是一个共享对象,可以在多个场景使用。
分为内部状态和外部状态,内部状态存储于flyweight中,包含了独立于flyweight场景的信息,这些信息使得flyweight可以被共享。
外部状态取决于flyweight的场景。
3 适用性:
有效性取决于如何使用它以及在何处使用它。一下情况都成立时使用flyweight:
. 一个应用程序使用了大量的对象
. 完全由于使用大量的对象,造成了最大的存储开销
. 对象的大多数状态都可变为外部状态
. 如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象
. 应用程序不依赖于对象标识。由于Flyweight对象可被共享,概念上明显有别的对象,标识测试将返回真值。
4 参与者:
. Flyweight:描述一个接口,通过接口flyweight可以接受并作用于外部状态
. ConcreteFlyweight:实现Flyweight接口,并为内部状态增加存储空间。ConcreteFlyweight对象必须可共享的。存储的状态必须是内部的。
. UnsharedConcreteFlyweight:并非所有的Flyweight子类都需要被共享。UnsharedConcreteFlyweight通常将ConcreteFlyweight作为子节点。Flyweight接口不强制共享。
. FlyweightFactory:创建并管理flyweight对象。确保合理的共享flyweight。
. Client:维护一个对flyweight的引用。计算或存储一个flyweight的外部状态。
5 协作:
. flyweight执行时所需要的状态必定是内部的或外部的。内部状态存储于ConcreteFlyweight对象之中,外部有Client存储或计算。当用户调用flyweight的操作时,将状态传递给它。
. 用户不应直接对ConcreteFlyweight进行实例化,只能从FlyweightFactory获得ConcreteFlyweight
6 效果:
存储节约:
. 因为共享,实例总数减少
. 对象内部状态的平均数目
. 外部状态是计算的还是存储的
和Composite模式结合使用,共享叶节点。但叶节点不能存储指向父节点的指针。
7 实现:
1)删除外部状态
2)管理共享对象
8 相关模式:
Flyweight通常和Composite结合使用。用共享叶节点的有向无环图实现逻辑上的层次结构
最好用Flyweight实现State和Strategy对象
Flyweight的更多相关文章
- Flyweight(享元模式)
import java.util.Hashtable; /** * 享元模式 * @author TMAC-J * 享元模式一般和工厂模式一起使用,但此处为了更好说明,只用享元模式 * 定义:享元模式 ...
- 设计模式(十二)享元模式(Flyweight Pattern)
一.引言 在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非 ...
- 享元模式 - Flyweight
Flyweight(享元模式) 定义 GOF:运用共享技术有效地支持大量细粒度的对象. GOF的定义比较专业化,通俗来说,当你有大量相似的实例时,你把其中相同的实例取出来共享. 例子 在你的游戏场景中 ...
- C#设计模式系列:享元模式(Flyweight)
当频繁地从数据源读取数据时,读出的内容存在重复,那么需要使用享元模式(Flyweight)来提高内存效率,Flyweight模式将节省更多空间,共享的Flyweight越多,空间节省越大. 1.享元模 ...
- 享元模式/Flyweight模式/对象结构型/设计模式
flyweight 享元模式(对象结构型) Flyweight在拳击比赛中指最轻量级,即"蝇量级"或"雨量级",这里选择使用"享元模式"的意 ...
- [工作中的设计模式]享元模式模式FlyWeight
一.模式解析 Flyweight在拳击比赛中指最轻量级,即“蝇量级”或“雨量级”,这里选择使用“享元模式”的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持 ...
- 享元模式(Flyweight Pattern)
一.引言 在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非 ...
- C++设计模式-Flyweight享元模式
Flyweight享元模式 作用:运用共享技术有效地支持大量细粒度的对象. 内部状态intrinsic和外部状态extrinsic: 1)Flyweight模式中,最重要的是将对象分解成intrins ...
- Flyweight(享元)--对象结构型模式
1.意图 运用共享技术有效地支持大量细粒度的对象. 2.动机 Flyweight模式描述了如何共享对象,使得可以细粒度地使用它们,而无需高昂的代价.flyweight是一个共享对象,它可以同时在多个场 ...
- 七个结构模式之享元模式(Flyweight Pattern)
定义: 运用共享技术对大量细粒度对象的复用,这要求这些对象都很相似,状态变化很小.将这些对象的内部状态和外部状态进行区分,对于内部状态相同的只存储一个对象,而对不同的外部状态则采用不同的操作. 结构图 ...
随机推荐
- css3超过指定宽度文字,显示省略号
text-overflow:ellipsis; overflow:hidden; white-space:nowrap; width:200px;
- thinkphp的钩子的两种配置和两种调用方法
thinkphp的钩子行为类是一个比较难以理解的问题,网上有很多写thinkphp钩子类的文章,我也是根据网上的文章来设置thinkphp的钩子行为的,但根据这些网上的文章,我在设置的过程中,尝试了十 ...
- Mysql数据库优化
to be add... --------------------------------------------------------------------------------------- ...
- Go 模板
原文链接 很多语言都有很多方式将字符串从一只形式转换成另一种形式.Go 使用模板的方法通过提供一个对象作为参数来转换字符串.这个一般来讲是用来将对象插入到HTML中的,不过它同样可以用在其他的情况下. ...
- Unity3D 装备系统学习Inventory Pro 2.1.2 总结
前言 写在最前面,本文未必适合纯新手,但有一些C#开发经验的还是可以看懂的,虽然本人也是一位Unity3D新人,但是本文只是自己在学习Inventory Pro的学习总结,而不是教程,本人觉得要读懂理 ...
- Access数据库中Sum函数返回空值(Null)时如何设置为0
在完成一个Access表中数据统计时,需要统计指定字段的和,使用到了Sum函数,但统计时发现,指定条件查询统计时有可能返回空值(Null),导致对应字段显示为空白,正常应显示为0.基本思路是在获取记录 ...
- paper 111:图像分类物体目标检测 from RCNN to YOLO
参考列表 Selective Search for Object Recognition Selective Search for Object Recognition(菜菜鸟小Q的专栏) Selec ...
- Java多线程编程——进阶篇二
一.线程的交互 a.线程交互的基础知识 线程交互知识点需要从java.lang.Object的类的三个方法来学习: void notify() 唤醒在此对象监视器上等待的单个 ...
- html5,进度条
<form action="" id="myform"> <progress value="20" max= ...
- cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element ‘dubbo:application’. – schema_reference.4: Failed to read schema document
解决办法: 1.直接百度下载一个dubbo.xsd文件 2.myeclispe-->window-->preferences-->xml catalog-->add 完美解决!