网站大量收购独家精品文档,联系QQ:2885784924

C设计模式0310.ppt

  1. 1、本文档共134页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C设计模式0310

I n t e r s e c t s在执行之前,必须知道g l y p h所在的场景,如下图所示。 表示字母“a”的f l y w e i g h t只存储相应的字符代码;它不需要存储字符的位置或字体。用户提供与场景相关的信息,根据此信息f l y w e i g h t绘出它自己。例如, Row glyph知道它的子女应该在哪儿绘制自己才能保证它们是横向排列的。因此Row glyph可以在绘制请求中向每一个子女传递它的位置。 3. 适用性 F l y w e i g h t模式的有效性很大程度上取决于如何使用它以及在何处使用它。当以下情况都成立时使用F l y w e i g h t模式: ? 一个应用程序使用了大量的对象。 ? 完全由于使用大量的对象,造成很大的存储开销。 ? 对象的大多数状态都可变为外部状态。 ? 如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。 ? 应用程序不依赖于对象标识。由于F l y w e i g h t对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值。 4. 结构 下面的对象图说明了如何共享f l y w e i g h t。 5. 参与者 ? F l y w e i g h t ( G l y p h ) — 描述一个接口,通过这个接口f l y w e i g h t可以接受并作用于外部状态。 ? C o n c r e t e F l y w e i g h t( C h a r a c t e r ) — 实现F l y w e i g h t 接口, 并为内部状态( 如果有的话) 增加存储空间。 C o n c r e t e F l y w e i g h t对象必须是可共享的。它所存储的状态必须是内部的;即,它必须独立于C o n c r e t e F l y w e i g h t对象的场景。 ? U n s h a r e d C o n c r e t e F l y w e i g h t ( R o w, C o l u m n ) — 并非所有的F l y w e i g h t子类都需要被共享。F l y w e i g h t接口使共享成为可能,但它并不强制共享。在F l y w e i g h t对象结构的某些层次, U n s h a r e d C o n c r e t e F l y w e i g h t对象通常将C o n c r e t e F l y w e i g h t对象作为子节点(R o w和C o l u m n就是这样)。 ? F l y w e i g h t F a c t o r y — 创建并管理f l y w e i g h t对象。 — 确保合理地共享f l y w e i g h t。当用户请求一个f l y w e i g h t时,F l y w e i g h t F a c t o r y对象提供一个已创建的实例或者创建一个(如果不存在的话)。 ? Client — 维持一个对f l y w e i g h t的引用。 — 计算或存储一个(多个) f l y w e i g h t的外部状态。 6. 协作 ? f l y w e i g h t执行时所需的状态必定是内部的或外部的。内部状态存储于C o n c r e t e F l y w e i g h t对象之中;而外部对象则由C l i e n t对象存储或计算。当用户调用f l y w e i g h t对象的操作时,将该状态传递给它。 ? 用户不应直接对C o n c r e t e F l y w e i g h t类进行实例化,而只能从F l y w e i g h t F a c t o r y对象得到C o n c r e t e F l y w e i g h t对象,这可以保证对它们适当地进行共享。 7. 效果 使用F l y w e i g h t模式时,传输、查找和/或计算外部状态都会产生运行时的开销,尤其当f l y w e i g h t原先被存储为内部状态时。然而,空间上的节省抵消了这些开销。共享的f l y w e i g h t越多,空间节省也就越大。 存储节约由以下几个因素决定: ? 因为共享,实例总数减少的数目 ? 对象内部状态的平均数目 ? 外部状态是计算的还是存储的 共享的F l y w e i g h t越多,存储节约也就越多。节约量随着共享状态的增多而增大。当对象使用大量的内部及外部状态,并且外部状态是计算出来的而非存储的时候,节约量将达到最大。所以,可以用两种方法来节约存储:用共享减少内部状态的消耗,用计算时间换取对外部状态的存储

文档评论(0)

seunk + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档