设计模式【3】——单例模式(Singleton 模式)

前言

Singleton 模式解决问题十分常见,我们怎样去创建一个唯一的变量(对象)?在基于对象的设计中我们可以通过创建一个全局变量(对象)来实现,在面向对象和面向过程结合的设计范式(如 C++中)中,我们也还是可以通过一个全局变量实现这一点。但是当我们遇到了纯粹的面向对象范式中,这一点可能就只能是通过 Singleton 模式来实现。

一、单例模式(Singleton 模式)

在 Singleton 模式的结构图中可以看到,我们通过维护一个 static 的成员变量来记录这个唯一的对象实例。通过提供一个 staitc 的接口 instance 来获得这个唯一的实例。UML图如下:


Singleton 模式示意图

二、具体源码

1.Singleton.h

代码如下(示例):

#pragma once

#ifndef _SINGLETON_H_

#define _SINGLETON_H_

#include <iostream>

class Singleton

{

public:

  static Singleton* Instance();

protected:

  Singleton();

private:

  static Singleton* _instance;

};

#endif //SINGLETON_H


2.Singleton.cpp

代码如下(示例):

#include "Singleton.h"

Singleton* Singleton::_instance = 0;

Singleton::Singleton()

{

  std::cout << "Singleton...." << std::endl;

}

Singleton* Singleton::Instance()

{

  if (_instance == 0)

  {

    _instance = new Singleton();

  }

  return _instance;

}


3.main.cpp

#include "Singleton.h"

int main(int argc, char* argv[])

{

  Singleton* sgn = Singleton::Instance();

  return 0;

}


三、运行结果

Singleton模式的运行结果如下:

总结

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

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


本文参考《设计模式精解-GoF 23 种设计模式解析附 C++实现源码》,对内容进行整理,方便大家学习。如想学习详细内容,请参考此书。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容