- 2
- 0
- 约1.05万字
- 约 62页
- 2016-08-07 发布于湖北
- 举报
06.结构型模式2研讨
模式的描述 动机 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 动机 对一个对象进行访问控制的一个原因是为了只有在确实需要这个对象时才对它进行创建和初始化。 考虑一个可以在文档中嵌入
您可能关注的文档
最近下载
- 2025年慢性鼻窦炎诊疗指南.pptx
- 【暑假专项培优】专题06 排进水问题—小升初奥数思维之典型应用题精讲精练讲义(通用版).docx VIP
- 电动汽车用开关磁阻电机高性能驱动系统研究综述报告.pptx VIP
- TCCEAS 002-2022 房屋工程总承包工程量计算规范.pdf VIP
- 泰曼-格林干涉仪.pptx VIP
- 济南大学《大学英语》2023-2024学年第一学期期末试卷.pdf VIP
- 基于美标的砌体结构体系施工工法.docx VIP
- DB36_T 2069-2024 脑卒中患者误吸风险评估及预防规范.docx VIP
- 建筑防火设计思维导图_速查手册.pdf VIP
- 7.2-010大连理工大学城市学院课程考核管理规定试行.pdf VIP
原创力文档

文档评论(0)