`

单实例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模式,最常见的比如我们希望整个应用程序中只有一个...

    设计模式.pdf_电子版_pdf版

    设计模式概述与 Singleton 模式详解 在软件设计中,设计模式是解决问题的方案,学习现有的设计模式可以做到经验复用。拥有设计模式词汇,在沟通时就能用更少的词汇来讨论,并且不需要了解底层细节。 设计模式可以...

    设计模式 单键 singleton

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

    JavaScript设计模式.pdf

    JavaScript设计模式.pdf JavaScript设计模式是指在软件开发中使用JavaScript语言编写的设计模式。这些设计模式旨在提高代码的重用性、可读性、维护性和扩展性。以下是JavaScript设计模式的知识点总结: 1. 单体...

    设计模式整理(很全)

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

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

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

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

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

    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++来实现设计模式中的,单例模式,里面有内容说明和相关实例代码介绍

    C++设计模式基础教程.pdf

    C++设计模式基础教程.pdf 本资源摘要信息涵盖了C++设计模式基础...学习设计模式需要积累案例,大量背类图,多思考、多梳理、归纳总结,尊重事物的认知规律,注意事物临界点的突破。不可急躁,需要不断的追求和实践。

    c sharp设计模式

    C# 设计模式 - 单件模式(Singleton Pattern) 单件模式(Singleton Pattern)是 Creational Pattern 中的一种,旨在保证一个类仅有一个实例,并提供一个全局的访问点。该模式解决了一个基本的问题,即如何绕过常规...

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

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

    IOS 单例设计模式实例Demo

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

    结城浩《图解设计模式》笔记

    本笔记主要讲述了设计模式的基本概念和应用,包括 Iterator 模式、Adapter 模式、TemplateMethod 模式、FactoryMethod 模式和 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个设计模式,总结了面向对象设计中最有价值的经验,并且用简洁可复用的形式表达出来。本书分类描述了一组设计良好、表达清楚的软件设计模式,这些模式在实用环境下特别...

Global site tag (gtag.js) - Google Analytics