本系列所有文章来自李建忠老师的设计模式笔记,系列如下:
设计模式(一)面向对象设计原则
23种设计模式(二)组件协作之模板方法
23种设计模式(三)组件协作之策略模式
23种设计模式(四)组件协作之观察者模式
23种设计模式(五)单一职责之装饰模式
23种设计模式(六)单一职责之桥模式
23种设计模式(七)对象创建之工厂方法
23种设计模式(八)对象创建之抽象工厂
23种设计模式(九)对象创建之原型模式
23种设计模式(十)对象创建之构建器
23种设计模式(十一)对象性能之单件模式
23种设计模式(十二)对象性能之享元模式
23种设计模式(十三)接口隔离之门面模式
23种设计模式(十四)接口隔离之代理模式
23种设计模式(十五)接口隔离之适配器
23种设计模式(十六)接口隔离之中介者
23种设计模式(十七)状态变化之状态模式
23种设计模式(十八)状态变化之备忘录
23种设计模式(十九)数据结构之组合模式
23种设计模式(二十)数据结构之迭代器
23种设计模式(二十一)数据结构之职责链
23种设计模式(二十二)行为变化之命令模式
23种设计模式(二十三)行为变化之访问器
23种设计模式(二十四)领域规则之解析器

文章目录

  • 动机
  • 设计方法一
  • 模式定义
  • 要点总结

  享元模式与与单价模式都属于性能模式。都是用来解决对象带来的性能成本的问题。

动机

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

设计方法一

  • flyweight.cpp

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(){//...}
};

  即先判断对象是否有被创建,若没有则创建,然后加到对象池里面。若有创建则直接返回创建的对象即可。

模式定义

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

要点总结

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

  Flyweight采用对象共享的做法来降低系统中对象的个数,从而降低细粒度对象给系统带来的内存压力。在具体实现方面,要注意对象状态的处理(一般来讲提供只读状态即可)。

  对象的数量太大从而导致对象内存开销加大。

23种设计模式(十二)对象性能之享元模式相关推荐

  1. 实现对象的复用——享元模式

    本文转载自 :http://blog.csdn.net/lovelion/article/details/7667781 当前咱们国家正在大力倡导构建和谐社会,其中一个很重要的组成部分就是建设资源节约 ...

  2. 设计模式【10】-- 顺便看看享元模式

    开局还是那种图,各位客官往下看- 享元模式是什么? 享元模式(FlyWeight),是结构型模式的一种,主要是为了减少创建对象的数量,减少内存占用以及提高性能.说到这里,不知道你是否会想到池技术,比如 ...

  3. 【设计模式2022】第十三章 享元模式

    [设计模式2022]第十三章 享元模式 文章目录 [设计模式2022]第十三章 享元模式 一.概述 二.结构 三.实现 四.分析 1.优点 2.缺点 3.使用场景 五.Integer 包装类 一.概述 ...

  4. 23种设计模式(二十二)状态模式(阁瑞钛伦特软件-九耶实训)

    常说的设计模式是23种设计模式,分为3大类: 创建型模式5种:工厂方法.抽象工厂.单例.建造者.原型 结构型模式7种:适配器.代理.桥接.装饰者.外观.享元.组合 行为型模式11种:模板方法.解释器. ...

  5. 23种设计模式(二十三)访问者模式(阁瑞钛伦特软件-九耶实训)

    常说的设计模式是23种设计模式,分为3大类: 创建型模式5种:工厂方法.抽象工厂.单例.建造者.原型 结构型模式7种:适配器.代理.桥接.装饰者.外观.享元.组合 行为型模式11种:模板方法.解释器. ...

  6. 23种设计模式(二)

    3.2.5 外观模式 是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式.该模式对外有一个统一的接口,外部应用程序不需要关心子系统是怎么实现的,这样大大降低了应用程序的 ...

  7. 23种设计模式C++源码与UML实现--建造者模式

    建造者模式 代码仓库地址:建造者模式 Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种.Builder模式是一种对象创建模式之一,用来隐藏复合对象的创建过程.他把 ...

  8. 23种设计模式C++源码与UML实现--外观模式

    外观模式 facade模式也叫外观模式,是由GoF提出的23种设计模式中的一种,facade模式为一组具有类似功能的类群,比如类库,子系统等等,提供一个一致的简单界面.这个一致的简单的界面被称为fac ...

  9. 23种设计模式C++源码与UML实现--策略模式

    策略模式 Strategy模式也叫策略模式,是行为模式之一,它对一系列的算法加以封装,为所有算法定义一个抽象算法接口,并通过继承该抽象算法接口对所有的算法加以封装和实现,具体的算法选择交给客户端决定. ...

  10. 设计模式C++实现(9)——享元模式

    软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径.设计模式中运用了面向对象编程语言的重要特性:封装.继承.多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累.最 ...

最新文章

  1. (luogu4180) [Beijing2010组队]次小生成树Tree
  2. 蔡司三坐标_蔡司三坐标测针的安装指南
  3. matlab this指针,C++ this指针(直戳本质)
  4. Spring MVC面试题
  5. kohana3 数据库模块配置
  6. linux dev alloc name,深入理解Linux网络技术内幕-设备注册和初始化(二)
  7. 【Java】一例贯通Java基础语法
  8. ionic 禁止横屏处理
  9. 突击计划——两种温度格式的转换
  10. maven打jar包 没有主属性清单
  11. 设计模式 总揽 通过这篇随笔可以访问所需要了解的设计模式
  12. j循环赋予li id_《Science》子刊:超强Li-S电池诞生!硫负载量高达15mg·cm-2
  13. php7 libiconv,PHP7编译错误:php编译undefined reference to `libiconv 错误
  14. Web3到底是什么?
  15. PowerVR SDK记录
  16. layui日期插件样式冲突
  17. 程矢Oracle PowerDesigner中生成Oracle版本主键和自增列
  18. react入门-列表渲染(动态获取数据)
  19. Word中批量更新域的两个小方法
  20. vr授权服务器虚拟机,vm虚拟机上的连接远程服务器

热门文章

  1. 采用DIV+CSS布局的好处
  2. web安全day20:今天讲清楚漏洞和木马的区别,最后一个实验演示通过445端口控制服务器
  3. php 5.6 mcrypt,mcrypt在Windows / IIS上的PHP 5.6中不起作用
  4. Windows平台安装cocos2d-x V3.17.2
  5. 游戏开发之C++类和对象相关概念实例(C++)
  6. VMvare桥接网络连接不上解决办法
  7. HDOJ--3790--最短路径问题(双权值问题)
  8. 「小程序JAVA实战」小程序开源搜索组件(53)
  9. solr6.6 导入索引数据
  10. 浅谈SaaS应用开发的难度