- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
模式的描述 动机 Flyweight不能对它所运行的场景做出任何假设,这里的关键概念是内部状态和外部状态之间的区别。 内部状态存储于flyweight中,它包含了独立于flyweight场景的信息,使得可以被共享。 外部状态取决于Flyweight的场景,并根据场景而变化,不可共享。 用户对象负责在必要的时候将外部状态传递给Flyweight。 逻辑上,文档中的给定字符每次出现都有一个对象与其对应,如下图所示。 然而,物理上每个字符共享一个flyweight对象,而这个对象出现在文档结构中的不同地方。 字符代码是flyweight的内部状态;它的位置、字体等是外部状态。 模式的描述 动机 这些对象的类结构如下图所示。 Glyph是图形对象的抽象类,其中有些对象可能是flyweight,基于外部状态的那些操作将外部状态作为参量传递给flyweight。 内部状态 外部状态(位置、字体等) 可以使用Flyweight模式的情况 Flyweight模式的有效性很大程度上取决于如何使用它以及在何处使用它。 当以下情况都成立时使用该模式: 一个应用程序使用了大量的对象。 由于使用大量的对象,造成很大的存储开销。 对象的大多数状态都可变为外部状态。 如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。 应用程序不依赖于对象标识。 模式的结构 外部状态 内部状态 Flyweight对象关键字 通常构成组合 模式的对象图 下面的对象图说明了如何共享flyweight 共享 flyweight 模式的参与者 Flyweight:描述一个接口,通过这个接口flyweight可以接受并作用于外部状态。 ConcreteFlyweight: 实现Flyweight 接口, 并为内部状态( 如果有的话) 提供存储空间。 UnsharedConcreteFlyweight:并非所有的Flyweight子类都需要被共享 在Flyweight对象结构的某些层次, UnsharedConcreteFlyweight对象通常将ConcreteFlyweight对象作为子节点。 FlyweightFactory:确保合理地共享flyweight。 当用户请求一个flyweight时,FlyweightFactory对象提供一个已创建的实例或者创建一个(如果不存在的话)。 Client 维持一个对flyweight的引用。 计算或存储一个(多个) flyweight的外部状态。 参与者的协作 flyweight执行时所需的状态必定是内部的或外部的 内部状态存储于ConcreteFlyweight对象之中; 外部对象则由Client对象存储或计算,当用户调用flyweight对象的操作时,将该状态传递给它。 用户不应直接对ConcreteFlyweight类进行实例化,而只能从FlyweightFactory对象得到ConcreteFlyweight对象 这可以保证对它们适当地被共享。 模式的效果 1、使用Flyweight模式时,传输、查找和/或计算外部状态都会产生运行时的开销。 2、然而,空间上的节省抵消了这些开销,共享的flyweight越多,空间节省也就越大。 3、存储的节约由以下几个因素决定: 因为共享实例总数所减少的数目; 对象内部状态的存储量; 外部状态是计算的还是存储的。 4、可以用两种方法来节约存储空间: 用共享减少内部状态的消耗; 用计算时间换取对外部状态的存储消耗。 5、Flyweight模式经常和Composite模式结合起来表示一个层次式结构,这一层次式结构是一个共享叶节点的图 注意:被共享的叶结点不能存储父结点对象指针。 模式的实现 在实现Flyweight模式时,注意以下几点: 1) 删除外部状态 该模式的可用性在很大程度上取决于是否容易识别外部状态并将它从共享对象中删除。 如果不同种类的外部状态和共享前对象的数目相同的话,删除外部状态不会降低存储消耗。 理想的状况是,外部状态可以由一个单独的对象结构计算得到,且该结构的存储要求非常小。 2)管理共享对象 因为对象是共享的,用户不能直接对它进行实例化,因此FlyweightFactory可以帮助用户查找某个特定的Flyweight对象。 FlyweightFactory对象经常使用关联存储帮助用户查找感兴趣的Flyweight对象。 2、模式的例子 flyweight.C 四、代理模式 1、模式的描述 2、模式的例子 1、模式的描述 意图 代理( PROXY )模式是对象结构型模式,它为其他对象提供一种代理以控制对这个对象的访问。 别名:Surrogate 动机 对一个对象进行访问控制的一个原因是为了只有在确实需要这个对象时才对它进行创建和初始化。 考虑一个可以在文档中嵌入
您可能关注的文档
- 《慢性肾脏病中医证候学的临床》结题汇报摘要.ppt
- 《氓》(新人教版必修2)摘要.ppt
- 5在校园中健康成长技术方案.ppt
- 5章不确定性评价方法另简技术方案.ppt
- 【三下】2.3蚕变了新模样精编.ppt
- 【山东省2013年高考语文专题复习指导(二十一)散文阅读(鲁人版)]精编.doc
- 《梅花》(王安石)摘要.ppt
- 5职业病危害项目申报办法技术方案.ppt
- 5中彩那天.1技术方案.ppt
- 5中医理论的哲学技术方案.ppt
- 专题16 名篇名句默写(全国通用)学生版-2026年中考语文一轮复习考点讲练.docx
- Unit 7 课时3 Reading 2(课件)-2025-2026学年八年级英语上册(译林版2024).pptx
- 第1节 金属矿物及铁的冶炼 第1课时(教学课件)-2025-2026学年九年级化学上册(沪教版2024).pptx
- 17.2 用公式法分解因式(第1课时)(平方差公式) (教学课件)-2025-2026学年八年级数学上册(人教版2024).pptx
- Unit 6 课时1 Starting out &词汇(课件)-2025-2026学年八年级英语上册(外研版2024).pptx
- 2025-2026学年广东省肇庆市高三上学期第一次模拟考试历史试卷(附答案解析).docx
- 第1节 金属矿物及铁的冶炼 第2课时(教学课件)-2025-2026学年九年级化学上册(沪教版2024).pptx
- 第9讲 整本书阅读《红岩》人物解读:余新江、甫志高、许云峰、成岗、刘思扬【教师版】-2025-2026学年八年级语文上册(统编版2024).docx
- 22.2 角平分线(第2课时)(教学课件)-2025-2026学年八年级数学上册(沪教版五四制2024).pptx
- 2025-2026学年广东省江门市普通高中高三上学期模拟检测语文试题(附答案解析).docx
原创力文档


文档评论(0)