往下看了一下,发现单例模式很好理解,直接一起写了吧!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模式在一起使用,因为系统中工厂对象一般来说只要一个。