当前位置: 首页 > news >正文

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

前言

        面向对象很好地解决了 “抽象” 的问题,但是不可避免的要付出一定的代价。对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理

        具体需要自己根据需求去评估

定义

        “对象性能” 模式。运用共享技术有效的支持大量细粒度对象        

动机

        在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行代价——主要指内存需求方面的代价

        如何在避免大量细粒度对象的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作?        

案例

        代码

class Font {
private://unique object keystring key;//object state//....public:Font(const string& key){//...}
};
ßclass FontFactory{
private:map<string,Font* > fontPool;public:Font* GetFont(const string& key){map<string,Font*>::iterator item=fontPool.find(key);if(item!=footPool.end()){return fontPool[key];}else{Font* font = new Font(key);fontPool[key]= font;return font;}}void clear(){//...}
};

类图

        

总结

        面向对象很好地解决了抽象性的问题,但作为一个运行在机器中的程序实体,我们需要考虑对象的代价问题。享元主要解决面向对象的代价问题,一般不触及面向对象的抽象性问题

        享元采用对象共享的方式来降低系统中的对象个数,从而降低细粒度对象对系统带来的内存压力。再具体实现方面,需要注意对象状态的处理

        对象的数量太大从而导致对象内存开销加大——什么样的数量才算大?这需要我们仔细地根据具体应用情况进行评估,不能凭空臆断

http://www.lryc.cn/news/450045.html

相关文章:

  • 桥接(桥梁)模式
  • 语言模型发展史
  • 【Linux】模拟实现一个shell
  • 云原生数据库 PolarDB
  • MobaXterm基本使用 -- 服务器状态、批量操作、显示/切换中文字体、修复zsh按键失灵
  • elastic Search 初步之向量检索的数据写入及检索查询
  • Tdesign TreeSelect 树形选择 多选
  • Pygame中Sprite实现逃亡游戏5
  • 等保2.0数据库测评之达梦数据库测评
  • 集成mcuboot后测试和验证的方法
  • Vulhub zico 2靶机详解
  • 宠物医院微信小程序源码
  • [教程]Crystal源码下载及编译
  • 【Android 14源码分析】WMS-窗口显示-流程概览与应用端流程分析
  • 双指针---(部分地更新)
  • 【Windows】自定义显示器的分辨率
  • 组播基础-2-IGMP协议
  • 基于Springboot+Vue的视频点播系统设计与实现登录 (含源码数据库)
  • 执行力怎么培养?
  • Power apps:一次提交多项申请
  • Oracle数据库物理结构操作管理
  • Python自然语言处理之spacy模块介绍、安装与常见操作案例
  • DSPy101
  • 网格交易策略:从原理、应用到实战Python回测
  • 软考论文《论大数据处理架构及其应用》精选试读
  • fatfs API使用手册
  • 9.23作业
  • Unity3D 房间去重叠化算法详解
  • mybatis 配置文件完成增删改查(五) :单条件 动态sql查询,相当于switch
  • 全球IP归属地查询-IP地址查询-IP城市查询-IP地址归属地-IP地址解析-IP位置查询-IP地址查询API接口