当前位置: 代码迷 >> 综合 >> C++设计模式学习(二) Singleton 模式
  详细解决方案

C++设计模式学习(二) Singleton 模式

热度:50   发布时间:2023-10-13 10:22:52.0

一、创建型模式-Singleton 模式

1.个人认为 Singleton 模式是设计模式中最为简单、最为常见、最容易实现,也是最应该熟悉和掌握的模式。且不说公司企业在招聘的时候为了考察员工对设计的了解和把握,考的最多的就是 Singleton 模式。Singleton 模式解决问题十分常见,我们怎样去创建一个唯一的变量(对象)?在基于设计模式精解-GoF 23 种设计模式解析附 C++实现源码 对象的设计中我们可以通过创建一个全局变量(对象)来实现,在面向对象和面向过程结合的设计范式(如 C++中)中,我们也还是可以通过一个全局变量实现这一点。但是当我们遇到了纯粹的面向对象范式中,这一点可能就只能是通过 Singleton 模式来实现了,可能这也
正是很多公司在招聘 Java 开发人员时候经常考察 Singleton 模式的缘故吧。Singleton 模式在开发中非常有用,具体使用在讨论给出。

二、模式选择

Singleton 模式典型的结构图为:
C++设计模式学习(二) Singleton 模式
在以上 Singleton 模式的结构图中可看出,通过维护一个 static 的成员变量来记录这个唯一的对象实例。通过提供一个 staitc 的接口 instance 来获得这个唯一的实例。

三、实现

代码例子:

Singleton.h

//Singleton.h
#ifndef SINGLETON_H
#define SINGLETON_H
#include
using namespace std;
class Singleton
{
public:
static Singleton* Instance();
protected:
Singleton();
private:
static Singleton* _instance;
};
#endif //~SINGLETON_H

Singleton.cpp

//Singleton.cpp
#include “Singleton.h”
#include
using namespace std;
Singleton* Singleton::_instance = 0;
Singleton::Singleton()
{
}
Singleton* Singleton::Instance()
{
if (_instance == 0)
{
_instance = new Singleton();
}
return _instance;
}

main.cp

//main.cpp
#include “Singleton.h”
#include
using namespace std;
void main()
{
Singleton* sgn = Singleton::Instance();
}

由于Singleton 不可实例化,因此将其构造函数声明为 protected 或者直接声明为 private。

讨论

Singleton 模式在开发中经常用到,且不说开发过程中一些变量必须是唯一的,比如说打印机的实例等等。Singleton 模式经常和 Factory(AbstractFactory)模式在一起使用,因为系统中工厂对象一般来说只要一个,笔者在开发 Visual CMCS的时候,语义分析过程(以及其他过程)中都用到工厂模式来创建对象(对象实在是太多了),这里的工厂对象实现就是同时是一个Singleton 模式的实例,因为系统我们就只要一个工厂来创建对象就可以了。

  相关解决方案