Published on

设计模式(5)——单例 Singleton

Authors
  • avatar
    Name
    Leon
    Twitter

五、Singleton (单例模式,对象创建型模式)

1. 问题:

  怎样创建一个唯一的变量(对象)?面向过程编程中可以创建一个全局变量(对象),纯粹面向对象中,可能只能通过 Singleton 模式来实现。

2. 功能:

  代替全局变量只生成一个实例

3. 意图:

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

4. 类图:

5. 中间层思考:

  单例模式在系统和全局变量之间添加了一个中间层。

6. 代码实现:

  1. 私有构造函数(禁用 new Singleton()
  2. 编写一个静态方法 getInstance() 返回 Singleton 实例

Singleton.h

// Singleton.h
#pragma once

#include <iostream>

using namespace std;

class Singleton {
public:
	static Singleton* getInstance();
private:
	Singleton();
	static Singleton* instance;
};

Singleton.cpp

// Singleton.cpp
#include "Singleton.h"

#include <iostream>

using namespace std;

Singleton* Singleton::instance = 0;

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

Singleton* Singleton::getInstance() {
	if (instance == 0) {
		instance = new Singleton();
	}
	return instance;
}

main.cpp

// main.cpp
#include "Singleton.h"

#include <iostream>

using namespace std;

int main(int argc, char* argv[]) {
	Singleton* sgn = Singleton::getInstance();
	return 0;
}