对象性能模式
定义:为了提高应用程序中对象的性能而衍生出的模式
“对象性能模式”:
- Singleton——单例模式
- Flyweight——享元模式
Singleton——单例模式
定义:保证一个类只能有一个实例,并提供这个实例的全局访问点。
要点:
- 不能有构造函数和Clone接口;
- 不能直接使用双重检查锁,会出现 reorder 的问题,如要使用应加入 atomic 标识;
使用:
-
在单线程的情况下可以直接使用线程不安全的方式即可;
-
多线程情况下可以使用加入 atomic 标识后的方式;
-
推荐使用局部静态变量的方式,书写简单、线程安全且跨平台。
// 局部静态变量只会初始化一次,并且是线程安全的 Singleton *Singleton::GetInstance2() { static Singleton *ins = new Singleton(); return ins; } 或者 Singleton &Singleton::GetInstance2() { static Singleton ins; return ins; }
Flyweight——享元模式
定义:利用共享技术有效地支持大量细粒度的对象。采用对象共享的做法来降低系统中对象的个数,具体实现方面要注意对象状态。
注意:“大量”的概念需要进行评估,非达到一定数量级后不需要使用此模式。
使用:类似于添加一个对象池,当对象存在则直接使用,不存在就加入池中,然后使用。