`

单实例Singleton设计模式

阅读更多

(一)C++实现方式:

 

class OnlyOne
{
	int data;

public:
	static OnlyOne& Instance()
	{
		static OnlyOne uniqueInstance;
		return uniqueInstance;
	}
public:
	int GetData(){return data;}
protected:
	OnlyOne():data(100){}	//构造函数为protected,也可以是private,但子类不能调用该构造函数
	OnlyOne(OnlyOne&){}
};

 

若要求返回值非静态,则借助友元函数:

namespace OnlyOne
{
	class RealOnlyOne
	{
	protected:
		int data;

	public:
		friend RealOnlyOne& Instance();

	protected:
		RealOnlyOne(): data(100){}
		RealOnlyOne(const RealOnlyOne &){}
	};

	RealOnlyOne& Instance()
	{
		static RealOnlyOne uniqueInstance;
		return uniqueInstance;
	}
}
 

 

也可以使用c++的模板,实现代码重用:

 

template<class T>
class Singleton
{
public:
	static T& Instance()
	{
		static T uniqueInstance;
		return uniqueInstance;
	}
};

class OnlyOne: public Singleton<OnlyOne>
{
	friend class Singleton<OnlyOne>;
	int data;

public:
	int GetData(){return data;}
protected:
	OnlyOne():data(100){}	//构造函数为protected,也可以是private,但子类不能调用该构造函数
	OnlyOne(OnlyOne&){}
};

 创建单实例方式示例:

 

int main()
{
	cout<<OnlyOne::Instance().GetData()<<endl;
	return 0;
}
 

(二)java实现方式,考虑了多线程同步

 

public class OnlyOne{
	private static volatile OnlyOne uniqueInstance = null;
	
	private OnlyOne(){
		
	}
	
	public static OnlyOne getInstance(){
		if(uniqueInstance == null){
			synchronized(OnlyOne.class){
				if(uniqueInstance == null){
					uniqueInstance = new OnlyOne();
				}
			}
		}
		
		return uniqueInstance;
	}
};
分享到:
评论

相关推荐

    设计模式 创建型模式 Singleton模式(单键)

    Singleton主要用于对象的创建,这意味着,如果某个类采用了Singleton模式,则在这个类被创建后,它将有且仅有一个实例可供访问。很多时候我们都会需要Singleton模式,最常见的比如我们希望整个应用程序中只有一个...

    设计模式 单键 singleton

    Singleton模式,顾名思义,Singleton就是确保一个类只有唯一的一个实例。Singleton主要用于对象的创建,这意味着,如果某个类采用了Singleton模式,则在这个类被创建后,它将有且仅有一个实例可供访问。 详细见博客 ...

    设计模式整理(很全)

    创建模式 设计模式之Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用new一样频繁....

    UML设计模式_9_设计模式(3)--Factory_Singleton模式

    是对类的实例化过程的抽象化。一些系统在创建对象时,需要动态地决定怎样创建对象,创建哪些对象,以及如何组合和表示这些对象。创建型模式描述了怎样构造和封装这些动态的决定。 创建型模式分为类的创建型模式...

    C#设计模式.PDF

    C#设计模式(7)-Singleton Pattern 50 一、 单例(Singleton)模式 50 二、 Singleton模式的结构: 51 三、 程序举例: 51 四、 在什么情形下使用单例模式: 52 五、 Singleton模式在实际系统中的实现 53 六、 C#...

    JAVA设计模式23种

    设计模式之Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new一样频繁. 设计模式...

    C++实现Singleton单例模式

    本文档,是利用C++来实现设计模式中的,单例模式,里面有内容说明和相关实例代码介绍

    Android 单例模式 Singleton 简单实例设计模式解析

    主要介绍了单例模式 Singleton 简单实例设计模式解析的相关资料,需要的朋友可以参考下

    IOS 单例设计模式实例Demo

    IOS 单例设计模式实例Demo 单例 设计 模式 IOS Singleton

    设计模式可复用面向对象软件的基础.zip

    本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用...

    33种JAVA设计模式DEMO

    这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(Factory Pattern) 抽象工厂模式...

    php设计模式 Singleton(单例模式)

    php /** * 单例模式 * * 保证一个类仅有一个实例,并提供一个访问它的全局访问点 * */ class Singleton { static private $_instance = null; private function __construct() { } static public function ...

    C#设计模式大全

    C#设计模式(7)-Singleton Pattern 一、 单例(Singleton)模式 二、 Singleton模式的结构: 三、 程序举例: 四、 在什么情形下使用单例模式: 五、 Singleton模式在实际系统中的实现 六、 C#中的Singleton...

    设计模式:可复用面向对象软件的基础--详细书签版

     本书结合设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别...

    设计模式 GOF 23

    本书设计实例从面向对象的设计中精选出23个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好,表达清楚的软件设计模式,这些模式在实用环境下有特别有用...

    设计模式--C++

    1.1 什么是设计模式 2 1.2 Smalltalk MVC 中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...

    c++设计模式全系列+应用场景+实例说明

    2. **单例模式(Singleton Pattern)**:单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。 3. **观察者模式(Observer Pattern)**:观察者模式是一种行为设计模式,定义了对象间的...

    JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能

    本文实例讲述了JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能。分享给大家供大家参考,具体如下: 单例模式 单例模式的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中...

    设计模式(.PDF)

    1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...

    《设计模式》中文版(23个设计模式的介绍与运用)

    1.1 什么是设计模式 2 1.2 Smalltalk MVC中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...

Global site tag (gtag.js) - Google Analytics