设计模式3 创建模式之Singleton模式

发布于:2025-09-07 ⋅ 阅读:(22) ⋅ 点赞:(0)

参考:1. 《设计模式精解- GoF 23 种设计模式解析附 C++实现源码》作者博客

设计模式3 创建模式之Singleton模式


0 前言

如何去创建一个唯一的对象?
可以使用全局变量来实现;
当我们遇
到了纯粹的面向对象范式中,这一点可能就只能是通过 Singleton 模式来实现了,可能这也正是很多公司在招聘 Java 开发人员时候经常考察 Singleton 模式的缘故吧.

1 模式选择

在这里插入图片描述

一个private的 static 的class * _instance 变量;
一个static 的 instance 方法(接口);

2 实现代码

//singleton.h

#ifndef __SINGLETON_H_
#define __SINGLETON_H_

#include <iostream>
using namespace std;

class singleton
{
public:
	static singleton * instance();
protected:
	singleton();
private:
	static singleton* _instance;
};


#endif //~__SINGLETON_H_

//singleton.cpp

#include "singleton.h"
#include <iostream>

using namespace std;

singleton* singleton::_instance = 0;

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

singleton* singleton::instance()
{
	if(0 == _instance)
	{
		_instance = new singleton();	
	}
	return _instance;
}

//main.cpp

#include "singleton.h"
#include <iostream>
using namespace std;

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

在这里插入图片描述

Singleton 模式的实现无须补充解释,需要说明的是, Singleton 不可以被实例化,因此我们将其构造函数声明为 protected 或者直接声明为 private

3 讨论

Singleton 模式在开发中经常用到, 且不说我们开发过程中一些变量必须是唯一的,比如说打印机的实例等等。

Singleton 模式经常和 Factory( AbstractFactory) 模式在一起使用, 因为系统中工厂对象一般来说只要一个。

总结

singleton 模式保证类变量是唯一的。

public的static instance 接口;private的 static _instance 变量;protected 或者 private的 construction function 构造函数。

singleton模式 经常与工厂模式一起使用。


网站公告

今日签到

点亮在社区的每一天
去签到