创建型模式-单例模式

1 什么是单例模式

单例模式是一种创建型设计模式,它确保一个类仅有一个实例,并提供一个全局访问点来访问该实例。单例模式常用于需要唯一实例来协调任务的场景,比如线程池、日志记录器、缓存等。

2 举个例子

下面以一个简单的日志记录器为例来说明单例模式的应用。首先,我们定义一个日志记录器类 Logger,并将其构造函数和拷贝构造函数都设为私有,以防止外部代码直接创建对象实例。

class Logger {
public:
    static Logger& getInstance() {
        static Logger instance;  // 静态局部变量确保仅被初始化一次
        return instance;
    }

    void log(const string& message) {
        cout << "Log: " << message << endl;
    }

private:
    Logger() {} // 私有构造函数

    // 禁止拷贝构造和赋值操作
    Logger(const Logger&) = delete;
    Logger& operator=(const Logger&) = delete;
};

在上述示例中,Logger 类包含一个公有的静态方法 getInstance,用来获取该类的唯一实例。静态局部变量确保 Logger 类仅在第一次调用 getInstance 方法时被初始化,且保证了线程安全的初始化。同时,为了防止对象被复制,我们还删除了拷贝构造函数和赋值操作符。

在客户端代码中,我们可以通过 Logger::getInstance() 来获取日志记录器的实例,并调用实例的 log 方法来记录日志:

int main() {
    Logger& logger = Logger::getInstance();
    logger.log("This is a log message.");

    return 0;
}

在上述示例中,通过调用 Logger::getInstance() 方法获取日志记录器的唯一实例,并调用实例的 log 方法来记录日志。无论客户端代码中有多少次调用 Logger::getInstance(),都将获得同一个 Logger 实例。

3 总结

单例模式的优点在于可控对象的数量,避免了无限制地创建相同的对象,同时提供了一个全局访问点来管理对象。然而,使用单例模式也可能引入全局状态,增加了对象之间的耦合,因此应该谨慎使用。

posted @ 2023-11-10 15:01  Qt小罗  阅读(34)  评论(0编辑  收藏  举报