享元模式与单例模式、缓存、对象池的区别

戳下面链接查看模式相关文章:

单例模式享元模式

更多设计模式参看:

设计模式之模式概述(模式汇总)(C++实现)

享元模式与单例模式区别

单例模式(Singleton Pattern): 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。单例模式是一种对象创建型模式。

享元模式(Flyweight Pattern): 运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。

在单例模式中,一个类只能创建一个对象,而在享元模式中,一个类可以创建多个对象,每个对象被多处代码引用共享。FlyweightFactory(享元工厂类)可以创建多个ConcreteFlyweight(具体享元类)

享元模式与缓存的区别

在享元模式的实现中,通过工厂类来“缓存”已经创建好的对象(比如采用map存储)。这里的“缓存”实际上是“存储”的意思,跟平时所说的“数据库缓存”“CPU 缓存”“MemCache 缓存”是不同的。平时说的缓存,主要是为了提高访问效率,而非复用

享元模式与对象池的区别

同样的对象池、连接池(比如数据库连接池)、线程池等也是为了复用,但其与享元模式的复用有区别的。

相对于熟悉的连接池、线程池(可参见 ThreadPool线程池的C++实现),先来了解下对象池。

C++ 这样的编程语言,内存的管理是由程序员负责的。为了避免频繁地进行对象创建和释放导致内存碎片,可以预先申请一片连续的内存空间,也就是这里说的对象池。每次创建对象时,我们从对象池中直接取出一个空闲对象来使用,对象使用完成之后,再放回到对象池中以供后续复用,而非直接释放掉。

池化技术中的“复用”可以理解为“重复使用”,主要目的是节省时间(比如从对象池中取一个对象,不需要重新创建)。在任意时刻,每一个对象、连接、线程,并不会被多处使用,而是被一个使用者独占,当使用完成之后,放回到池中,再由其他使用者重复利用。

享元模式中的“复用”可以理解为“共享使用”,在整个生命周期中,都是被所有使用者共享的,主要目的是节省空间

参考:

https://time.geekbang.org/column/article/208572

个人能力有限,如有错误之处或者其他建议,敬请告知欢迎探讨,谢谢!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值