介绍
单例模式优点是可以确保系统中只存在单个对象实例,缺点是不便扩展,一定程度上违背单一原则,既提供业务方法,又提供创建对象方法
饿汉式单例
在类加载的时候就创建好对象,获取对象时直接返回即可
class EagerSingleton {
public:
static EagerSingleton *getInstance() {
return m_inst;
}
private:
EagerSingleton() {}
static EagerSingleton *m_inst;
};
EagerSingleton *EagerSingleton::m_inst = new EagerSingleton();
懒汉式单例
在类加载的时候没有创建对象,第一次获取对象时根据需要创建对象并返回,此时需要考虑线程安全问题
class LazySingleton {
public:
static LazySingleton *getInstance() {
if (s_inst == NULL) {
std::lock_guard<std::mutex> lg(s_mtx);
if (s_inst == NULL) {
s_inst = new LazySingleton();
}
}
return s_inst;
}
private:
LazySingleton() {}
static LazySingleton *s_inst;
static std::mutex s_mtx;
};
LazySingleton *LazySingleton::s_inst = NULL;
std::mutex LazySingleton::s_mtx;
饿汉式和懒汉式对比
文章来源:https://www.toymoban.com/news/detail-785773.html
实现方式 | 优点 | 缺点 |
饿汉式 | 简单,无须考虑线程安全,调用速度快 | 无论是否需要都创建了对象,资源利用效率不高,导致系统启动时间变长 |
懒汉式 | 系统启动时间减少,可以延迟创建对象,提高资源利用效率 | 需要处理线程安全问题,初始化期间有可能影响系统性能 |
IoDH技术
应该是java语言独有的,不确定性能如何文章来源地址https://www.toymoban.com/news/detail-785773.html
到了这里,关于《设计模式的艺术》笔记 - 单例模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!