软件开发经典设计模式:创建型-单例模式

单例模式

        单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。在软件开发中,这种设计模式被广泛使用来管理对以下资源的独占访问:配置对象、日志对象、线程池、硬件资源等。

  1. 唯一性:类负责创建自己的实例,并确保这个类只有一个实例存在。通过私有构造函数防止其他对象创建新实例。

  2. 全局访问点:单例类提供了一个静态方法或函数,让外部代码可以访问类的唯一实例,通常通过一个叫做 getInstance() 的方法来完成。

#include <iostream>
#include <mutex>

class Singleton {
public:
    // 禁止拷贝构造和赋值操作
    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

    // 获取单例实例的静态方法
    static Singleton& getInstance() {
        static Singleton instance; // C++11 线程安全的懒汉式单例
        return instance;
    }

    void doSomething() {
        std::cout << "Doing something in the Singleton instance." << std::endl;
    }

private:
    // 私有构造函数
    Singleton() {
        std::cout << "Singleton constructor called." << std::endl;
    }

    // 可以添加其他私有成员
    // std::mutex mutex; // 如果需要互斥锁保护其他成员
};

int main() {
    Singleton& instance = Singleton::getInstance();
    instance.doSomething();

    // 再次获取实例不会创建新的对象
    Singleton& anotherInstance = Singleton::getInstance();
    anotherInstance.doSomething();

    return 0;
}

特点:

  • 内存效率:单例模式延迟实例化,即在第一次需要该类的实例时进行创建(懒汉式),可以优化内存使用。

  • 线程安全性:对于多线程环境,使用 C++11 的局部静态变量,可以实现线程安全的懒汉式单例,以保证只有一个实例被创建。

  • 禁止复制:通过禁止拷贝构造和复制操作符,确保不能通过复制生成实例。

场景:

  • 配置管理:系统级配置管理,一旦初始化后,全局的任何客户端都使用同一份配置实例。

  • 资源控制:想要强制控制某个资源的访问,如具体硬件设备、日志记录和连接池等。

  • 日志记录系统:无需多次实例化日志对象,在系统中任何地方都可以使用单实例进行日志记录。

注意事项:

  • 多线程问题:确保线程安全,尤其是在首次创建对象时。

  • 生命周期:程序生命周期结束后,单例对象通常会自动被销毁,对于某些资源需要显式回收的场景要留心处理。

  • 全局状态管理:避免过度使用单例,以防止系统出现难以维护的隐藏全局状态或副作用。

单例模式是一个强大而有用的模式,但应当谨慎使用以免使代码的可测试性和可维护性降低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值