设计模式3 创建模式之Singleton模式
参考:1. 《设计模式精解- GoF 23 种设计模式解析附 C++实现源码》作者博客
设计模式3 创建模式之Singleton模式
- 0 前言
- 1 模式选择
- 2 实现代码
- 3 讨论
- 总结
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模式 经常与工厂模式一起使用。