《设计模式的艺术》笔记 - 单例模式

发布时间:2024年01月12日

介绍

????????单例模式优点是可以确保系统中只存在单个对象实例,缺点是不便扩展,一定程度上违背单一原则,既提供业务方法,又提供创建对象方法

饿汉式单例

? ? ? ? 在类加载的时候就创建好对象,获取对象时直接返回即可

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;

饿汉式和懒汉式对比

? ? ? ??

饿汉式和懒汉式优缺点
实现方式优点缺点
饿汉式简单,无须考虑线程安全,调用速度快无论是否需要都创建了对象,资源利用效率不高,导致系统启动时间变长
懒汉式系统启动时间减少,可以延迟创建对象,提高资源利用效率需要处理线程安全问题,初始化期间有可能影响系统性能

IoDH技术

? ? ? ? 应该是java语言独有的,不确定性能如何

文章来源:https://blog.csdn.net/yuweiping5247/article/details/135548016
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。