享元模式<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 ...
随机推荐
- 求平面上N点最远两点和最近两点距离
最近两点,二分法 最远两点,凸包+找对踵点
- idea用法
更新gradle的依赖后,刷新项目引入jar包的方法: view--Tool Buttons 在右侧 Gradle 点刷新
- phpfpm和nginx设置开机自动启动
## 添加执行权限 chmod a+x /etc/init.d/nginx chmod a+x /etc/init.d/php-fpm ## 加入服务 chkconfig --add nginx ch ...
- appium+python+android+HTMLTestRunner使用过程中的问题
1:问:appium客户端刚发布了一版新的,我想升级可以吗?答:建议对于刚发布的新版本不要立即升级,因为客户端每升级一版它肯定会去增加和删减一些语句.所以不建议立即升级. 应该先采取调研的态度看 ...
- HTTP请求的python实现(urlopen、headers处理、 Cookie处理、设置Timeout超时、 重定向、Proxy的设置)
python实现HTTP请求的三中方式:urllib2/urllib.httplib/urllib 以及Requests urllib2/urllib实现 urllib2和urllib是python两 ...
- 安装IE11必备更新
https://support.microsoft.com/zh-cn/help/2847882
- 云计算共享组件--时间同步服务NTP(2)
一.标准时间讲解 地球分为东西十二个区域,共计 24 个时区 格林威治作为全球标准时间即 (GMT 时间 ),东时区以格林威治时区进行加,而西时区则为减. 地球的轨道并非正圆,在加上自转速度逐年递减, ...
- cisco路由的ip静态路由添加(二)
路由器Corp 配置Corp(config)#ip route 192.168.20.0 255.255.255.0 10.1.3.2 150 Corp(config)#ip route 192.16 ...
- Win7主题存放路径详解
WIN7用户主题--- 自定义主题 首先当然是用户自定义的主题文件夹,这个文件夹一般是存放在下面这个路径(注意那个用户名改成你自己的登陆名喔,比如 administrator) C:\Users\用 ...
- (5.4)mysql高可用系列——MySQL异步复制(实践)
关键词:mysql复制,mysql异步复制,mysql传统异步复制 [1]实验环境 操作系统:CentOS linux 7.5 数据库版本:5.7.24 数据库架构:主从复制,主库用于生产,从库用于数 ...