设计模式学习总结:单例模式(Singleton)

意图

保证类只有一个实例,并提供一个访问它的全局访问点。

适用性

  1. 当类只能有一个实例而且客户可以通过一个众所周知的访问点访问它时。
  2. 当这个唯一实例应该是通过子类可扩展时

结构

这里写图片描述

优缺点

优点

1>对唯一实例的受控访问。因为singleton类封装了它的唯一实例,所以它可以严格控制客户怎样以及何时访问它。
2>缩小名空间。singleton是对全局变量的一种改进,它避免了那些存储唯一实例的全局变量污染名空间。
3>允许对操作和表示的精化。singleton可以有子类,并且用这个扩展类的实例来配置一个应用是很容易的。
4>允许可变数目的实例。你可以用相同的方法来控制应用应有的实例数量,而不仅限于单例。

缺点

1>实际使用时可能有线程不安全的隐患存在。

实现

1>保证一个唯一的实例。常见的实现方法如下。

class Singleton 
{
public:
    //静态函数
    static Singleton *getInstance();    
protected:
    //隐藏构造函数
    Singleton();
private:
    static Singleton *_instance = nullptr;
}
Singleton *Singleton::_instance = nullptr;
Singleton *SingleTon::getInstance()
{
    //延时初始化
    if(_instance == nullptr)
        _instance = new Singleton();
    return _instance;
}

2> 创建singleton的子类

实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值