23种设计模式之Singleton模式(三)

往下看了一下,发现单例模式很好理解,直接一起写了吧!HAHAHA

第一部分:创建型模式

3. Singleton模式

a. 问题

这个对象(类)只能有一个实例,C++(面向对象和面向过程的结合)的话可以通过设置一个全局变量来实现,如果时纯面向对象的Java,就需要Singleton模式来实现了(不会Java,这句话不太懂,-……-),C++当然也可以这样用啦。

b.基本思想

通过维护static的成员变量来记录这个唯一的实例,然后通过static的接口函数instance();来创建这个对象,内部加入判断条件,只能创建一次,然后不要忘记屏蔽默认构造函数。

c.代码实现

//Singleton.h
#ifndef _SINGLETON_H_ 
#define _SINGLETON_H_
#include <iostream> 
using namespace std;
class Singleton 
{ 
public: 
	static Singleton* Instance();
protected:
	Singleton();     //Singleton不可以被实例化, 屏蔽构造函数
private: 
	static Singleton* _instance;
	//自动释放
	// GC 机制
    class GC
    {
    public:
        ~GC()
        {
            // 可以在这里销毁所有的资源,例如:db 连接、文件句柄等
            if (_instance!= NULL) {
                delete _instance;
                _instance= NULL;
            }
        }
        static GC gc;  // 用于释放单例
    };
};

//Singleton.cpp
#include "Singleton.h"
#include <iostream> 
using namespace std;
Singleton* Singleton::_instance = 0;      //静态成员变量初始化

Singleton::Singleton() { cout<<"Singleton...."<<endl; }

Singleton* Singleton::Instance() 
{ 
	if (_instance == 0) { 
		_instance = new Singleton();
	}
	return _instance; 
}

// 主动释放
static void DestoryInstance()
{
    if (_instance!= NULL) {
        delete _instance;
        _instance= NULL;
    }
}

客户端

#include "Singleton.h"
#include <iostream> 
using namespace std; 
Singleton::GC Singleton::GC::gc; // 程序结束自动释放
int main(int argc,char* argv[]) 
{ 
	Singleton* sgn = Singleton::Instance();
	sgn->DestoryInstance();
	return 0;
}

还有多线程问题:https://blog.csdn.net/liang19890820/article/details/61615495种有介绍

d.使用场景

如和Factory模式在一起使用,因为系统中工厂对象一般来说只要一个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值