结构型模式之Flyweight模式
1、意图
运用共享技术有效的支持大量细粒度的对象。
2、适用性
以下情况使用Flyweight模式
(1)一个应用程序使用了大量的对象
(2)完全由于使用大量的对象,造成很大的存储开销
(3)对象的大多数状态可变化外部状态
(4)如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象
(5)应用程序不依赖于对象标识。
3、参与者
(1)Flyweight:描述一个接口,通过这个接口flyweight可以接受并作用于外部状态
(2)ConcreteFlyweight:实现Flyweight接口, 并为内部状态增加存储空间。ConcreteFlyweight对象必须是可共享的。它所存储的状态是必须是内部的
(3)UnsharedConcreteFlyweight:并非所有的Flyweight子类都需要被共享。Flyweight接口使共享成为可能,但它并不强制共享。在Flyweight对象结构的某些层次,UnsharedConcreteFlyweight对象通常将ConcreteFlyweight对象作为子节点
(4)FlyweightFactory:创建并管理flyweight对象;确保合理地共享flyweight。当用户请求一个flyweight时,FlyweightFacotry对象提供一个已创建一实例或者创建一个。
(5)Client:维持一个对flyweight的引用 ;计算或存储一个(多个)flyweight的外部状态
4、协作
flyweight执行时所需要的状态必定是内部的或外部的。内部状态存储于ConcreteFlyweight对象之中,而外部对象则由Client对象存储或计算。当用户调用 flyweight对象的操作时,将该状态传递给它
用户不应直接对ConcreteFlyweight类进行实例化,而只能从FlyweightFactory对象得到ConcreteFlyweight对象,这可以保证对它们适当的进行共享。
5、效果
使用flyweight模式时,传输、查找、计算外部状态都 会产生运行时的开销,尤其当flyweight原先被存储为内部状态时。然而,空间上的节省抵消了这些开销。共享的flyweight越多,空间节省就越大。
存储节约由以下几个因素决定:
(1)因为共享,实例总数减少的数目
(2)对象内部状态的平均数目
(3)外部状态是计算的还是存储的
6、相关模式
Flyweight模式通常与Composite模式结合起来,用共享叶结点的有向无环图实现一个逻辑上的层次结构。
通常,最好用Flyweight实现State和Strategy对象
结构型模式之Flyweight模式相关推荐
- Java设计模式之结构型:享元模式
一.什么是享元模式: 享元模式通过共享技术有效地支持细粒度.状态变化小的对象复用,当系统中存在有多个相同的对象,那么只共享一份,不必每个都去实例化一个对象,极大地减少系统中对象的数量.比如说一个文本系 ...
- Java设计模式之结构型:装饰器模式
一.什么是装饰器模式: 当需要对类的功能进行拓展时,一般可以使用继承,但如果需要拓展的功能种类很繁多,那势必会生成很多子类,增加系统的复杂性,并且使用继承实现功能拓展时,我们必须能够预见这些拓展功能, ...
- 结构型设计模式之组合模式
结构型设计模式之组合模式 组合模式 应用场景 优缺点 主要角色 组合模式结构 分类 透明组合模式 创建抽象根节点 创建树枝节点 创建叶子节点 客户端调用 安全组合模式 创建抽象根节点 创建树枝节点 创 ...
- 设计模式(结构型)之享元模式(Flyweight Pattern)
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...
- 创建型、结构型、行为型模式(2)
来源:http://blog.csdn.net/wulingmin21/article/details/6757111 创建型模式 Singleton模式解决的是实体对象个数的问题. 除了Single ...
- 创建型、结构型、行为型模式(1)
来源:http://blog.csdn.net/wulingmin21/article/details/6753363 目的 创建型模式 Creational Pattern 结构型模式 Struct ...
- 设计模式——结构型之用桥梁模式(Bridge Pattern)将“抽象”与“实现”解耦(五)
引言 相信对于现实生活中这样的情况都不陌生,比如说开关与它具体控制的电器,开关的类型多种多样,而电器也是千变万化,两者之间相对独立变化却又耦合在一起,再比如说奶茶店的奶茶,有不同规格大小.不同口味.不 ...
- [设计模式] 结构型:享元模式(Flyweight Pattern)
文章目录 什么是享元模式 设计与实现 Integer应用享元模式 什么是享元模式 "享"的意思是"共享","元"的意思是"对象&q ...
- java-设计模式(结构型)-【代理模式】
1.代理模式(ProxyMode) 定义:外观模式是对类与类之间关系的描述,而代理模式是对原来的方法添加其他的操作. 代理有"网关"的含义,比如用户访问论坛,则要经过代理(网关)授 ...
最新文章
- 深度学习--TensorFlow(4)BP神经网络(损失函数、梯度下降、常用激活函数、梯度消失梯度爆炸)
- selenium 浏览器driver地址
- 【产品】密码明文显示的必要性和解决方案
- js快速判断IE浏览器(兼容IE10与IE11)
- ubuntu12.04 安装中文输入法
- POJ 3517 And Then There Was One( 约瑟夫环模板 )
- Qt数据库编程_基本
- Jerry的ABAP原创技术文章合集
- 3dvary灯光材质为什么不亮_装修小白设计家里的灯光,知道这些参数就行了!
- Zen Coding 系列教程一:入门
- mysql limit 后子查询_mysql 关于limit 子查询和获取某当天所有记录
- 永不消逝的缓存数据:Adaptec 5445Z RAID卡评测(连载之一)
- mysql数据库在哪里写语句_Mysql数据库操作语句
- 安装完office没有图标_很多人不会设置路由器?只因没有弄懂安装顺序,看完你就会了...
- 浅谈LoRa,LoRaWAN,NB-IoT三类物联网技术
- Mac 微信防撤回免认证登录多开插件:Tweak
- idea 远程调试resin
- 【Unity3d学习】魔鬼与牧师(动作分离版本)
- 日语“不要”有几种说法。
- 什么是BASE最终一致性
热门文章
- delphi 中怎么知道某一个月有多少天
- CSS中常用中文字体的Unicode编码
- 求用1,2,5这三个数不同个数组合的和为100的组合个数
- Fedora 12 安装配置subversion
- python用什么软件编程1001python用什么软件编程-怎样才能写出 Pythonic 的代码 #P1001#...
- python四大软件-太牛逼!一款软件几乎可以操作所有的数据库!
- python是不是特别垃圾-python垃圾回收机制
- python教程第四版pdf下载-笨办法学python第四版 电子书(pdf格式)
- python为什么中文要encoding-python中encoding是什么意思
- python读取excel-python读写Excel