23种设计模式 - 对象性能(Singleton - Flyweight享元)
2024-09-07 05:46:40
其他设计模式 23种设计模式(C++)
每一种都有对应理解的相关代码示例 → Git原码 ⌨
对象性能
面向对象很好地解决了“抽象”的问题,但是必不可免地付出一定的代价。对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理。
Singleton
动机(Motivation)
- 在软件系统中,经常有这样一些特殊的嘞,必须保证他们在系统中只存在一个实例,才能确保他们的逻辑正确性、以及良好的效率。
- 如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?
- 这应该是类设计者的责任,而不是使用者的责任。
模式定义
保证一个类仅有一个实例,并提供一个该实例的全局访问点。 ——《设计模式》GoF
结构(Structure)
要点总结
- Singleton模式中的实例构造器可以设置为protected以允许子类派生。
- Singleton模式一般不要支持拷贝构造函数和Clone接口,因为这有可能导致多个对象实例,与Singleton模式的初衷违背。
- 如何实现多线程环境下安全的Singleton?注意对双检查锁的正确实现。
Flyweight 享元
动机(Motivation)
- 在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指内存需求方面的代价。
- 如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作?
模式定义
运用共享技术有效地支持大量细粒度的对象。 ——《设计模式》GoF
结构(Structure)
要点总结
- 面向对象很好地解决了抽象性的问题,但是作为一个运行在机器中的程序实体,我们需要考虑对象的代价问题。Flyweight主要解决面向对象的代价问题,一般不触及面向对象的抽象性问题。
- Flyweight采用对象共享的做法来降低系统中对象的个数,从而降低细粒度对象给系统带来的内存压力。在具体实现方面,要注意对象状态的处理。
- 对象的数量太大从而导致对象内存开销加大——什么样的数量才算大?这需要我们仔细的根据具体应用情况进行评估,而不能凭空臆断。
最新文章
- Xcode查找内存泄漏
- JAVA EE中session的理解
- 一些值得学习和借鉴的.Net 开源项目
- AI - Ideas
- 本地Git仓库与Github远程仓库同步
- Transform.InverseTransformPoint 反向变换点
- js计算日期的前几天的日期
- JSOI2015 分组赛记
- asp.net弹出框后页面走样
- Landsat元数据批量下载工具
- 类 this指针 const成员函数
- iOS crash日志分析
- mysql workbench快捷键小结
- 软件工程(FZU2015) 增补作业
- JSON数据解析(自写)
- Nginx优化(十七)
- css - 文字元素等的美化效果代码汇总(更新中...)
- 分布式文件系统比较出名的有HDFS 和 GFS
- 【C++】深度探索C++对象模型读书笔记--构造函数语义学(The Semantics of constructors)(四)
- python2和python3输入输出相关