在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中,只存在一个实例,才能确保它们逻辑正确性和良好的效率。
特点:
- 保证一个类仅有一个实例,并且提供一个该实例的全局访问点。
- Singleton模式中的实例构造器可以设置为protected以运行子类派生或者直接设置为private。
- Singleton模式一般不要支持拷贝构造函数和Clone接口,因为这有可能导致多个对象实例,与Singleton模式的初衷违背。
通过一个static的成员变量来记录这个唯一的实例。
以下是C++代码实现:
Singleton.h
#pragma once
class Singleton {
public:
static Singleton* Instance();
protected:
Singleton();
private:
static Singleton* instance;
};
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;
}
Main.cpp
#include"Singleton.h"
#include<iostream>
using namespace std;
int main()
{
Singleton* sg = Singleton::Instance();
return 0;
}
运行结果