专业编程基础技术教程

网站首页 > 基础教程 正文

设计模式-创建型模式-单例模式(单例设计模式的应用场景)

ccvgpt 2024-07-26 00:48:17 基础教程 9 ℃

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。

单例模式的主要目的是限制一个类只能有一个实例,并提供一个访问该实例的全局访问点。这样可以确保在整个应用程序中,只有一个实例存在,避免了多个实例带来的资源浪费和冲突。

设计模式-创建型模式-单例模式(单例设计模式的应用场景)

单例模式的实现通常包括以下几个要素:

1. 私有的构造函数:通过将构造函数设为私有,防止外部代码创建实例。

2. 静态成员变量:在类中定义一个静态成员变量,用于保存实例。

3. 静态访问方法:提供一个静态的访问方法,用于获取实例。该方法通常为 getInstance()。

单例模式的优点包括:

1. 全局访问:可以在任何地方访问单例实例,方便共享和调用。

2. 节省资源:由于只有一个实例存在,可以避免重复创建和销毁对象,节省了系统资源。

3. 数据共享:单例模式可以提供一个中心化的数据共享点,方便多个模块之间共享数据。

然而,单例模式也有一些缺点:

1. 违反单一职责原则:单例模式将实例化和全局访问的职责合并到一个类中,可能导致该类的职责过重。

2. 线程安全性:在多线程环境下使用单例模式时,需要考虑线程安全的问题,确保只有一个实例被创建。

在实际应用中,单例模式常用于需要全局共享的对象,例如日志记录器、数据库连接池、配置管理器等。

总结起来,单例模式通过限制一个类只能有一个实例,并提供全局访问点,确保在整个应用程序中只有一个实例存在。它在某些场景下非常有用,但也需要注意线程安全性和职责分离的问题。

// singleton_pattern.cpp

// 运行程序
// gcc singleton_pattern.cpp -o singleton_pattern && ./singleton_pattern

// 输出结果 object值一致即可
// Hello, I am a singleton object: 0x555555558152
// Hello, I am a singleton object: 0x555555558152

#include <iostream>
#include <thread>

class Singleton
{
public:
    static Singleton &getInstance()
    {
        static Singleton instance;
        return instance;
    }

    void showMessage()
    {
        std::cout << "Hello, I am a singleton object: " << this << std::endl;
    }

    // 禁止拷贝构造函数和赋值运算符
    Singleton(const Singleton &) = delete;
    Singleton &operator=(const Singleton &) = delete;

private:
    // 私有构造函数,防止外部创建实例
    Singleton() {}
};

int main(int argc, char *argv[])
{
    Singleton &instance = Singleton::getInstance();
    instance.showMessage();

    std::thread my_thread = std::thread([](){
        Singleton &instance = Singleton::getInstance();
        instance.showMessage();
    });
    my_thread.join();

    return 0;
}

Tags:

最近发表
标签列表