flyweight——享元模式

设计模式考点 中级软件设计师考试---设计模式 阅读详情

意图

运用共享技术有效地支持大量细粒度的对象。

适用性

当以下情况都成立时可以使用享元模式:

  • 一个应用程序使用了大量的对象。
  • 完全由于使用大量的对象,造成很大的存储开销。
  • 对象的大多数状态都可变为外部状态。
  • 如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。
  • 应用程序不依赖于对象标识。由于Flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值。

结构

参与者

Flyweight

——描述一个接口,通过这个接口flyweight可以接受并作用于外部状态。

concreteFlyweight

——实现Flyweight接口,并为内部状态(如果有的话)增加存储空间。

UnsharedConcreteFlyweight

——并非所有的Flyweight子类都需要被共享。Flyweight接口使共享成为可能,但它并不强制共享。

FlyweightFactory

——创建并管理flyweight对象。

——确保合理地共享flyweight。

Client

——维持一个队flyweight的引用。

——计算或存储一个(多个)flyweight的外部状态。

协作

  • flyweight执行时所需的状态必定是内部或外部的。
  • 用户不应直接对ConcreteFlyweight类进行实例化,而只能从FlyweightFactory对象得到ConcreteFlyweight独享,这可以保证对他们适当地进行共享。

效果

使用Flyweight时,传输、查找和/或计算外部状态都会产生运行时开销,尤其当flyweight原先被存储为内部状态时。然而,空间上的节省抵消了这些开销。共享的flyweight越多,空间节省也就越大。

存储节约由以下几个因素决定:

  • 因为共享,实例总数减少的数目。
  • 对象内部状态的平均数目。
  • 外部状态时计算的还是存储的。

实现

实现Flyweight时,注意以下几点:

1)删除外部状态。

2)管理共享对象。

C语言图形化界面——含图形、按钮、鼠标、进度条等部件制作(带详细代码、讲解及注释) 本文借助easyx库函数(提供下载链接),很方便地用C语言实现了鼠标、按钮、进度条、坐标尺等操作,为普通C程序的友好人机交互界面提供了一种简单便捷的方案。 阅读详情

相关推荐

平台跳跃游戏中的自动寻路,与地图导航扩展

平台游戏:主要的游戏方式是在2D平面上使用各种方式在悬浮平台上进行移动和穿过各种障碍。 现如的平台游戏中的平台特性与种类是很多的,像马里奥(FC)的单向支撑不可穿透的,或魂斗罗(FC)单向支撑可穿透的… \ 超级玛丽 魂斗罗 空洞骑士 蔚蓝 本博文 支撑 上 上 上 左、上、右 上 穿透 无 上、下 无 上(部分) 上下 所以本文主要以向上支撑并上下穿透的平台特性来进行实现 需求分析 在关卡设计后,地形的数据需要自动识别 地形中的平台可上下穿透移动,并可向上站立 平台的移动路..

MOV的博客 3062

享元模式-对象结构型模式

//享元模式:运用共享技术有效地支持大量细粒度的对象 #include #include #include using namespace std; //User,外部状态类 class User { public: User(string name) : _name(name) { } string Name() { return _name; } priva

豆子的collection 756

ptrade量化策略之ST股弱转强,回测年化115%

本策略的核心是精选ST股票,国九条过滤,防止直接暴雷退市,只做ST股票的弱转强

qq_29301281的博客 1786

软考 2015年上半年卷 错题知识点记录

1.VLIW:(Very Long Instruction Word) 超长指令字,一种非常长的指令组合,它把许多条指令连在一起,增加了运算的速度。 2.主存与cache的地址映射: 全相联地址映射:主存的任意一块可以映象到 Cache 中的任意一块。 直接相联映射:主存中一块只能映象到 Cache 的一个特定的块中。 组相联的映射:各区中的某一块只能存入缓存的同组号的空间内,...

weixin_33932129的博客 264

Python爬虫:爬取拼多多平台商品信息、销量、价格等数据

在本篇博客中,我们将深入探讨如何使用Python爬虫技术爬取拼多多平台的商品信息,包括商品的标题、销量、价格等详细数据。拼多多的商品页面通常是分页展示的,因此我们需要遍历多个页面,获取所有商品的信息。每个商品在拼多多平台上都有一个唯一的商品ID,我们可以通过该ID访问商品页面。通过以上的技术方案和代码示例,你已经掌握了如何使用Python爬虫获取拼多多平台上的商品信息、销量、价格等数据。等技术,解决拼多多平台的反爬虫机制,成功抓取我们所需的商品数据。,我们能够应对拼多多的反爬虫机制,稳定地获取到商品数据。

2201_76125261的博客 3656

基于业务目标的Agent自动化评测体系设计:超越准确率的有效性衡量

我们还是以电商全链路服务Agent我们还是以电商全链路服务Agent。

AI架构全栈开发实战笔记 318

设计模式第14讲——享元模式(Flyweight)

享元模式是一种结构型的设计模式。一、什么是享元模式 二、 角色组成 三、优缺点 四、应用场景 4.1 生活场景 4.2 java场景 五、代码实现 5.0 代码结构5.1 Bike——抽象享元类(FlyWeight)5.2 具体享元类(ConcreteFlyWeight)5.3 BikeFactory——享元工厂(FlyWeightFactory)5.4 testFlyWeight 六、总结

让~学习~成为一种习惯(橡 皮 人の技术博客) 1万+

openbmc 支持mctp over pcie(三)(支持作为endpoint)

本文介绍了在Intel BHS平台上支持MCTP over PCIe端点开发的调试方法。开发基于CodeConstruct和AspeedTech-BMC的开源项目,将内核驱动改为模块形式以便调试。内容包括DTS配置、驱动模块设置步骤,以及如何将BMC配置为端点设备。调试过程涉及内核模块加载、MCTPD启动、参数设置等关键命令,并展示了路由表、地址和邻居信息的测试结果。该方案仅为实验性工作,需注意停止其他使用/dev/aspeed-mctp0接口的应用。

wit_yuan的专栏 1557

享元模式(Flyweight)

享元模式(Flyweight Pattern)是一种结构型设计模式,它主要解决的问题是创建大量相似对象时的内存开销问题。该模式通过共享具有相同状态的对象来减少内存使用量。享元模式的思想是:当需要创建一个新对象时,首先检查是否已经存在具有相同状态的对象。如果存在,则返回已经存在的对象,否则创建一个新的对象。因此,如果要创建多个具有相同状态的对象,可以重复使用相同的对象,从而减少内存开销。通过运用共享技术来有效地支持大量细粒度对象的复用。

qq_53868937的博客 4260

单板电源设计(LDO、DC/DC)

高速电路设计的电源架构 在电路设计中,一块单板往往涉及多种电源,常见的如5V/3.3V/2.5V/1.8V/1.5V/1.2V/1V0.9V/0.75V等,如此多种类的电源不可能都直接通过背板从电源板获得。一般,单板仅有一种或者两种输入电源,如48V或12V,再由它们产生单板上器件所需要的电源。 单板如何由输入电源生成所需电源,常见有两种架构:集中式电源架构和分布式电源架构。 ...

sinat_15677011的博客 8330

Azure AI-102 认证全攻略: (二十八) 设置 Azure AI 服务 API

在本文中,您学习了如何通过 Azure 门户设置和管理 Azure AI 服务,以及如何通过编程方式访问这些服务。在这篇文章中,我们将深入探讨如何设置 Azure AI 服务,特别是如何通过 Azure API 来进行编程访问,以实现自动化和集成。通过本篇文章的学习,您不仅能够顺利完成 Azure AI-102 认证中的 API 配置和集成内容,还能高效地管理和优化 Azure AI 服务,构建稳定、可靠的 AI 应用。在成功设置并测试了 API 后,接下来要管理和维护您的 Azure AI 服务。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1447

享元模式 (Flyweight Pattern)

享元模式是一种结构型设计模式,它运用共享技术有效地支持大量细粒度的对象。享元模式通过共享技术避免大量拥有相同内容对象的开销,提高系统资源的利用率。

懵萌长颈鹿的博客 744

哨兵1号后向散射系数土壤水分反演

打开之前预处理之后的VH和VV极化的后向散射系数转存的tiff文件。

所有专家都曾始于新手 3293

享元模式-Flyweight Pattern

当一个软件系统在运行时产生的对象数量太多,将导致运行代价过高,带来系统性能下降等问题。例如在一个文本字符串中存在很多重复的字符,如果每一个字符都用一个单独的对象来表示,将会占用较多的内存空间,那么我们如何去避免系统中出现大量相同或相似的对象,同时又不影响客户端程序通过面向对象的方式对这些对象进行操作?享元模式正为解决这一类问题而诞生。享元模式通过共享技术实现相同或相似对象的重用,在逻辑上每一个出现...

心猿意碼 5735

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

享元模式(Flyweight Pattern)详解

https://www.cnblogs.com/amei0/p/7930013.html 享元模式(Flyweight Pattern) 定义: 采用一个共享来避免大量拥有相同内容对象的开销。这种开销中最常见、直观的就是内存的损耗。享元模式以共享的方式高效的支持大量的细粒度对象。 享元的英文是flyweight,是一个来自体育方面的专业用语,在拳击、摔跤和举重比赛中特指最轻量的级别。把这个单词移植到软件工程中,也是用来表示特别小的对象,即细粒度的对象。至于为什么把flyweight翻译为享元,可以理解为共享

yygr的博客 1678

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

享元模式(Flyweight Pattern)

设计模式 - 吕震宇 .NET设计模式系列文章 薛敬明的专栏 乐在其中设计模式(C#) 设计模式(14)-Flyweight Pattern 一、 享元(Flyweight)模式 Flyweight在拳击比赛中指最轻量级,即"蝇量级",有些作者翻译为"羽量级"。这里使用"享元模式"更能反映模式的用意。 享元模式以共享的方式高效地支持大量的细粒度对象。享元对象能做到共享

jiangxinyu的专栏 1278

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

享元模式(Flyweight Pattern)详解

享元模式是一种结构型设计模式,它通过共享技术有效地支持大量细粒度的对象。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。这种模式的核心思想是共享尽可能多的对象,以减少内存使用和提高性能。"享元"这个术语源自围棋术语,表示棋子。在围棋中,棋盘上棋子数量有限,但可以组合出千变万化的棋局。享元模式的命名就体现了这种"以少御多"的思想。享元模式是一种用于优化内存使用的结构型设计模式。它通过共享对象来减少内存占用,特别适用于需要创建大量相似对象的场景。

yk_dflkg的博客 1253

Flyweight享元模式

Flyweight享元模式是避免系统过多出现重复实例,同样的对象公用一个元,如下图所示: 以一个系统中一个文档中,有很多字,每个字有相应的字体,如果对每个字设置字体就如箭头前的模式.箭头后面是Flyweight模式结构,代码如下: Flyweight usingSystem; usingSystem.Collections.Generic; usingSy...

aicheng5121的博客 156

Android设计模式之享元模式(Flyweight Pattern)

一 享元模式介绍:1.1 使用享元模式有什么好处? 享元模式是对象池的一种实现,主要目的是用来尽可能减少内存使用量。适合于存在大量重复对象的场景,来缓存可共享的对象,达到对象共享,避免创建过多对象的效果,这样可以提升性能。1.2 关于享元对象? 享元对象中的部分状态可以共享,可以共享的状态为内部状态(内蕴状态),内部状态不会随环境变化,不可共享的状态是外部状态(外蕴状态),外部状态随外部环境

happy_horse的博客 1989

享元模式(Flyweight Pattern)

运用共享技术有效地支持大量细粒度的对象。在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。1、系统中有大量对象。2、这些对象消耗大量内存。3、这些对象的状态大部分可以外部化。4、这些对象可以按照内蕴状态分为很多组,当把外蕴对象从对象中剔除出来时,每一组对象都可以用一个对象来代替。5、系统不依赖于这些对象身份,这些对象是不可分辨的。用唯一标识码判断,如果在内存中有,则返回这个唯一标识码所标识的对象。

u013115157的博客 637

【设计模式】——享元模式(Flyweight Pattern)

享元模式(Flyweight Pattern)是一种对象结构型模式,它通过共享已经存在的对象来减少内存使用量和提高系统性能。享元模式特别适用于那些创建大量相似对象而导致内存消耗过大的场景。本文将详细介绍享元模式在C++中的实现和应用。

J^T的博客 2694

23种设计模式——享元模式(Flyweight Pattern)

本文介绍了23种经典设计模式之——享元模式(Flyweight Pattern)的使用及说明

Meteors.的博客 1345
上一篇: Gson解析json对不确定泛型的处理
下一篇: Proxy——代理模式
hunter800421
博客等级 码龄22年 60粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值