享元模式<Flyweight Pattern>
1、What-是什么?
享元模式是一种轻量级的结构型模式。旨在以共享的方式高效的支持大量的细粒度对象的复用。要求能够共享的对象必须是细粒度对象,这些对象比较相似,状态变化小。
2、Why-为什么?
享元对象做到共享的关键是区分了对象的内部状态(Internal State)和外部状态(External State)。
内部状态:存储在享元对象内部,不会随环境的变化而有所不同,是享元对象的共享部分;
外部状态:随环境变化而变化,是不允许共享的"个性化"状态。
外部状态有客户端保存,再享元对象被创建后,在使用时将外部状态传入享元对象内部。
内部状态和外部状态要求互不影响。
3、When/Where-何时何地使用?
案例一:当你要做一款文本编辑器,对于同一个字符"a",可能在不同位置多次出现,如果你将每个出现的字符都封装为一个独立的字符对象,将相当占用空间。倘若你注意到这些多次出现的字符"a"除了字符样式和位置信息不同外,其他属性均一致。那么对于这个字符对象来说,我们可将其字符样式和位置信息设置为外部状态,其他相同的属性设置为内部状态,从而达到在整个系统中虽然只使用了一个字符对象,但却可以展示出不同样式和位置的字母"a"。
案例二:在JAVA语言中,String类型就是使用了享元模式。String对象是final类型,一旦创建就不能改变。当你尝试对其进行“改变”(截取、拼接等字符操作)时,JVM执行的实际执行的操作是new了新的String对象。同时,JVM中的String对象是共享的,当系统存在两个包含相同字符串的String对象时,JVM实际上只创建了一个对象并提供两个引用,从而实现String对象的共享。
案例三:当你想做一款围棋软件,分析软件会发现围棋棋盘中包含大量的黑子和白子,它们除了每个棋子出现的位置不同外,其形状、大小均一致。若将每个棋子都作为一个独立的对象存储,将导致围棋软件在运行时占用较大内存空间。此时可以考虑使用享元模式。
4、How-如何使用?
推荐文章:https://www.cnblogs.com/edisonchou/p/7148258.html
DeepInThought
出处:
https://www.cnblogs.com/DeepInThought
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
享元模式<Flyweight Pattern>的更多相关文章
- 二十四种设计模式:享元模式(Flyweight Pattern)
享元模式(Flyweight Pattern) 介绍运用共享技术有效地支持大量细粒度的对象. 示例有一个Message实体类,某些对象对它的操作有Insert()和Get()方法,现在要运用共享技术支 ...
- 乐在其中设计模式(C#) - 享元模式(Flyweight Pattern)
原文:乐在其中设计模式(C#) - 享元模式(Flyweight Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 享元模式(Flyweight Pattern) 作者:weba ...
- Java享元模式(Flyweight Pattern)
享元模式(Flyweight Pattern)主要用于减少创建的对象数量,并减少内存占用并提高性能. 这种类型的设计模式属于结构模式,因为该模式提供了减少对象计数的方法,从而改善应用的对象结构. 享元 ...
- 设计模式-11享元模式(Flyweight Pattern)
1.模式动机 在面向对象程序设计过程中,有时会面临要创建大量相同或相似对象实例的问题.创建那么多的对象将会耗费很多的系统资源,它是系统性能提高的一个瓶颈. 享元模式就是把相同或相似对象的公共部分提取出 ...
- 设计模式系列之享元模式(Flyweight Pattern)——实现对象的复用
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 七个结构模式之享元模式(Flyweight Pattern)
定义: 运用共享技术对大量细粒度对象的复用,这要求这些对象都很相似,状态变化很小.将这些对象的内部状态和外部状态进行区分,对于内部状态相同的只存储一个对象,而对不同的外部状态则采用不同的操作. 结构图 ...
- 享元模式(Flyweight Pattern)
定义: 采用一个共享来避免大量拥有相同内容对象的开销.这种开销中最常见.直观的就是内存的损耗.享元模式以共享的方式高效的支持大量的细粒度对象. 享元的英文是flyweight,是一个来自体育方面的专业 ...
- 【UE4 设计模式】享元模式 Flyweight Pattern
概述 描述 运用共享技术有效地支持大量细粒度对象的复用.系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用. 由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻 ...
- 12.享元模式(Flyweight Pattern)
using System; using System.Collections; namespace ConsoleApplication5 { class Program { /// <summ ...
随机推荐
- 阶段3 3.SpringMVC·_03.SpringMVC常用注解_1 RequestParam注解
新建param.jsp页面.里面一个a标签. 新建Controller 输出字符串 重新部署 传参数 接收这个username并输出 把username换成name 接收不到. 使用RequestPa ...
- 奶牛渡河(dp)
奶牛渡河 时间限制: 1 Sec 内存限制: 128 MB提交: 36 解决: 27[提交][状态][讨论版][命题人:外部导入][Edit] [TestData] [同步数据] 题目描述 Far ...
- Jmeter实现WebSocket协议的接口
1.下载websocket插件的jar包 网盘链接:https://pan.baidu.com/s/1FDcTHdQcDo6izgROMgB96w 密码:uags 该包下载完成后直接放在jmeter的 ...
- java:WebService
1.WebService就是应用之间的远程调用,可以跨语言调用,为甚么可以跨语言调用,是因为其实依赖与xml语言,xml语言依赖http协议,http协议底层也是socket.
- JavaScript基础入门06
目录 JavaScript 基础入门06 Math 对象 Math对象的静态属性 Math对象的静态方法 指定范围的随机数 返回随机字符 三角函数 Date对象 基础知识 日期对象具体API 构造函数 ...
- Oracle 看出表结构与属性、表空间设计
1.Oracle 查看表空间 SELECT b.comments as 注释, a.column_name as 列名, a.data_type || '(' || a.data_length || ...
- 使用mint ui 的picker解决城市三级联动
<mt-popup v-model="popupVisible" position="bottom"> <div class="po ...
- JAVA师徒架构班 - 带徒模式
(转: http://www.jeecg.org/forum.php?mod=viewthread&tid=2291&extra=page%3D1&page=1) 一个程序员技 ...
- 关于deepin装机的一些经验总结
最近win10用的有一点腻,虚拟机很久之前就装上了deepin,乌班图,红帽等隶属于Linux一些操作系统,但是终究还是虚拟机所以还是想在真机上试试,所以照着deepin网上的流程装好了deepin并 ...
- NumPy进阶
数组算术 任何两个等尺寸数组之间的算术操作都应用了逐元素操作的方式. arr1 = np.array([[1,2,3],[4,5,6]]) arr2 = np.array([[4,2,1],[7,2, ...