栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

精讲设计模式-单例模式(Singleton模式)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

精讲设计模式-单例模式(Singleton模式)

1、问题

        个人认为 Singleton 模式是设计模式中最为简单、最为常见、最容易实现,也是最应该 熟悉和掌握的模式。且不说公司企业在招聘的时候为了考察员工对设计的了解和把握,考的 最多的就是 Singleton 模式。

        Singleton 模式解决问题十分常见,我们怎样去创建一个唯一的变量(对象)?在基于 对象的设计中我们可以通过创建一个全局变量(对象)来实现,在面向对象和面向过程结合 的设计范式(如 C++中)中,我们也还是可以通过一个全局变量实现这一点。但是当我们遇 到了纯粹的面向对象范式中,这一点可能就只能是通过 Singleton 模式来实现了,可能这也 正是很多公司在招聘 Java 开发人员时候经常考察 Singleton 模式的缘故吧。

        Singleton 模式在开发中非常有用,具体使用在讨论给出。

2、模式选择

        Singleton 模式典型的结构图为:

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

3、实现

        完整代码示例(code) Singleton 模式的实很简单,这里为了方便初学者的学习和参考,将给出完整的实现代 码(所有代码采用 C++实现,并在 VC 6.0 下测试运行)

//代码片断 1: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_
//代码片断 2:Singleton.cpp 

//Singleton.cpp
#include "Singleton.h" 
#include  
using namespace std; 
Singleton* Singleton::_instance = 0; 
Singleton::Singleton() 
{ 
 cout<<"Singleton...."< 
//代码片断 3:main.cpp 

//main.cpp 
#include "Singleton.h" 
#include  
using namespace std; 
int main(int argc,char* argv[])
{ 
Singleton* sgn = Singleton::Instance(); 
 return 0;
}

代码说明:

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

4、讨论

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997278.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号