Flyweight享元/共享模式(对象性能)

Flyweight

链接:享元模式实例代码 + 解析

目的

  • 在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价------主要指内存需求方面的代价。
  • 如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作?

P.s

享元/共享模式,的基本逻辑是将有相似或相同的细节且又存在细微差别的大量实例对象的统一管理,一般结构是共享对象 + KV的容器。

例子:可以类比为一个班级,其中不同的学生都是有独立的ID去对应,而班级的老师可以通过一些管理方式,去对学生(容器内的对象)进行批量、条件式、针对的管理。

模式定义

运行共享技术有效地支持大量细粒度的对象。 ------《设计模式》GoF

要点总结

  • 面向对象很好地解决了抽象性的问题,但是作为yield运行机器中的程序实体,我们需要考虑对象的代价问题, Flyweight主要解决面向对象的大家问题,一般不触及面向对象的抽象性问题。
  • Flyweight采用对象共享的做法来降低系统中对象的个数,从而降低细粒度对象给系统带来的压力。在具体实现方面,要注意对象状态的处理。
  • 对象的数量太大从而导致对象内存开销加大------什么样的数量才算大?这需要我们仔细的根据具体应用情况进行评估,而不能凭空臆断。

E.g

相关推荐
phdsky1 小时前
【设计模式】抽象工厂模式
c++·设计模式·抽象工厂模式
雾岛听蓝1 小时前
C++ 入门核心知识点(从 C 过渡到 C++ 基础)
开发语言·c++·经验分享·visual studio
7***37452 小时前
Java设计模式之工厂
java·开发语言·设计模式
xlq223222 小时前
19.模版进阶(上)
c++
yuuki2332332 小时前
【C++】初识C++基础
c语言·c++·后端
小年糕是糕手2 小时前
【C++】类和对象(二) -- 构造函数、析构函数
java·c语言·开发语言·数据结构·c++·算法·leetcode
雨中飘荡的记忆2 小时前
设计模式之原型模式
设计模式
玫瑰花店3 小时前
SomeIP报文详解
c++·someip
LengineerC3 小时前
Rust仿node事件总线的简单实现
设计模式·rust
利刃大大3 小时前
【c++中间件】redis介绍 && redis-plus-plus库使用
c++·redis·中间件