6 创建型模式-----单例模式

本文深入解析单例模式的原理和实现方式,强调确保系统中某类只有一个实例的重要性,通过私有构造函数和静态工厂方法来控制实例化过程,提供一个全局访问点。探讨其在节省资源方面的优势及可能违反单一职责原则的缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模式动机:对于系统中的某些类而言,确保只有一个实例运行很重要,例如一个系统只能有一个计时器或者ID生成器。

模式定义(Singleton Pattern)确保一个类只有一个实例,并且该类自己负责创建它自己的唯一实例,而且还必须可以向系统提供这个实例。

模式结构图:

 

模式分析:单例类拥有一个私有构造函数,确保用户无法通过new关键字创建它;模式中包括一个静态工厂方法和一个静态(确保唯一性)私有变量,该静态方法:

        1> 负责实例化自己,然后存储到静态变量中;

        2> 提供系统可访问的接口。

 

模式代码:

bt_单例模式.h

#ifndef SP_H
#define SP_H

#include <iostream>

using namespace std;

/*
    单例类
*/
class Singleton
{
public:
    static Singleton* getInstance()     // public提供外部访问接口
    {
        if(instance == NULL)            // 检查是否之前已经实例化了
        {
            instance = new Singleton;
        }
        return instance;
    }

private:
    Singleton(){ }                      // private构造确保客户不能new
  
private:
    static Singleton* instance;         // static确保唯一性
};
Singleton* Singleton::instance = NULL;

#endif // SP_H

bt_原型模式.cpp

#include "bt_单例模式.h"

int main()
{
    Singleton* instance1 = Singleton::getInstance();
    Singleton* instance2 = Singleton::getInstance();

    cout << "instance1 == instance2 : " << (instance1 == instance2 ? true : false) << endl;

    delete instance1;

    return 0;
}

模式优缺点:提供给系统一个唯一的实例,内存中永远只有一个对象,节约空间资源。同时也可以设计实例数目可控的单例扩展模式。缺点是单例类既是工厂又是产品,违背了“单一职责原则”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值