`

单例模式——Singleton

 
阅读更多
public class Singleton {
    private static Singleton instance;

    private Singleton(){}

    public static Singleton getInstance(){
        if(instance==null){
            instance=new Singleton();
        }else{
        }
        return instance;
    }

    public void fun(){
        System.out.println("in fun()");
    }
}

 

调用:

public static void main(String[] args) {
		Singleton sgt1=Singleton.getInstance();
		sgt1.fun();
		
		Singleton sgt2=Singleton.getInstance();
		sgt2.fun();
		
		Singleton sgt3=Singleton.getInstance();
		sgt3.fun();
}

 

上面的写法太天真,不能保证多线程安全性,如果要保证多线程安全,要这样写:C++代码:

#include <stdio.h>
#include <pthread.h>

//c语言中没有类到概念,最抽象到数据概念就是结构体;c++中才有class关键字。因此文件后缀是.cpp,而非.c
class Singleton{
private:
	Singleton(){}

	static Singleton* instance;
	static pthread_mutex_t lock;
	
public:
	//~Singleton(){}

	static void mutex_init(){
		pthread_mutex_init(&lock, NULL);
	}

	static Singleton* getInstance(){
		if(instance==NULL){
			pthread_mutex_lock(&lock);
			if(instance==NULL){
				instance=new Singleton;
				printf("obj created.\n");
			}
			pthread_mutex_unlock(&lock);
		}
		return instance;
	}

	static void mutex_destroy(){
		pthread_mutex_destroy(&lock);
	}

};

Singleton* Singleton::instance = 0; //类中声明的静态数据,需要再类外面再定义一次
pthread_mutex_t Singleton::lock;

void* fun1(void*){
	printf("%d\n", Singleton::getInstance());
}

void* fun2(void*){
	printf("%d\n", Singleton::getInstance());
}


int main(void){
	//两个线程使用singleton模式
	Singleton::mutex_init();

	pthread_t pid1, pid2;
	pthread_create(&pid1, NULL, fun1, NULL);
	pthread_create(&pid2, NULL, fun2, NULL);

	pthread_join(pid1, NULL);
	pthread_join(pid2, NULL);

	Singleton::mutex_destroy();

	return 0;
}

 

java代码(片段):

public static Singleton getInstance(){
    if(instance==NULL){
        synchronized(Singleton.class){
            if(instance==NULL){
	        instance=new Singleton;
	        printf("obj created.\n");
	    }
	}
    }
    return instance;
}

 

 

 

 

 

分享到:
评论

相关推荐

    c#单例模式(Singleton)的6种实现

    如:IO处理,数据库操作等,由于这些对象都要占用重要的系统资源,所以我们必须限制这些实例的创建或始终使用一个公用的实例,这就是我们今天要介绍的——单例模式(Singleton)。  使用频率高 单件模式(Singleton...

    设计模式——单例模式

    **设计模式——单例模式** 在软件工程中,设计模式是一种在特定场景下解决常见问题的标准方案,可以被复用并提升代码质量。单例模式是设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式...

    设计模式——单例模式(懒汉模式)

    单例模式是软件设计模式中的一种经典模式,它保证了类在任何情况下都只有一个实例存在。这个模式在很多场景下非常有用,例如控制全局资源、管理配置信息等。本文将详细探讨单例模式的懒汉式实现,并结合源码进行解析...

    设计模式——策略模式 & 单例模式

    策略模式和单例模式是软件设计中两种非常重要的设计模式,它们在实际开发中有着广泛的应用。在这篇文章中,我们将深入探讨这两种模式的核心概念、实现方式以及如何在实际项目中运用。 策略模式是一种行为设计模式,...

    IOS应用源码——Singleton.rar

    这个Singleton.rar文件很可能是包含了一个或多个使用了单例模式的iOS应用源代码示例。让我们深入探讨一下单例模式在iOS开发中的运用及其重要性。 首先,单例模式的主要优点在于它能有效地管理资源,特别是当资源...

    单例模式应用场景

    其中,单例模式(Singleton Pattern)作为最简单的设计模式之一,旨在确保一个类只有一个实例,并提供一个全局访问点。尽管有些设计模式专家认为它过于简单而不能称为真正的“模式”,但单例模式因其简洁性和实用性...

    单例 模式 singleton

    单例模式是一种设计模式,用于确保一个类在整个应用程序中只存在一个实例。这种模式在Java中广泛应用于需要全局访问点或资源管理的场景,比如配置管理、数据库连接池等。下面将详细阐述单例模式的实现方式、优化策略...

    2种单例模式:1赖汉式:2饿汉式

    这里我们将详细探讨标题中提到的两种单例模式——"懒汉式"(Lazy Initialization)和"饿汉式"(Eager Initialization)。 1. **饿汉式单例模式** 饿汉式单例的特点是类加载时就完成了实例化,确保了线程安全,但...

    设计模式实现——单例模式

    单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制共享资源、管理系统级别的服务或者简化对象间的交互。单例模式的核心在于...

    设计模式-单例模式

    **设计模式——单例模式** 单例模式是一种广泛应用于软件设计中的创建型设计模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于控制共享资源的访问,比如线程安全的数据库连接池...

    C++中的三大设计模式:单例模式、工厂模式与观察者模式的代码实现

    内容概要:本文档介绍了三个经典的软件设计模式——单例模式(Singleton Pattern)、工厂模式(Factory Pattern)以及观察者模式(Observer Pattern)的具体实现,并给出了带有详细注释的C++代码范例。对每个设计模式都有...

    C#设计模式(1)——单例模式.pdf

    本次将聚焦于一种较为简单的模式——单例模式。 #### 单例模式概述 单例模式是一种创建型模式,它的核心在于确保某个类只有一个实例,并提供一个全局可访问的访问点。这种模式非常实用,尤其是在需要频繁地创建和...

    通过python实现单例模式(类变量).rar

    压缩包文件代码是一个常见的设计模式——单例模式(Singleton Pattern) 的 Python 实现。单例模式确保一个类只有一个实例,并提供一个全局访问点来获取该实例。这在需要控制资源访问或需要协调系统范围内的操作时...

    设计模式——单例

    设计模式是软件工程中的一种最佳实践,用于解决在不同场景下重复出现的问题。...通过阅读提供的"iOS 设计模式——单例"相关资料,可以深入理解在iOS开发环境中如何有效利用单例模式来优化代码结构和提高程序性能。

    java设计模式之——单例模式

    单例模式是软件设计模式中的一种经典模式,其主要目的是控制类的实例化过程,确保在任何情况下,一个类只有一个实例存在。这种模式通常用于管理共享资源或者全局配置,例如数据库连接池、线程池、日志服务等。在Java...

    单例模式(Singleton Pattern)

    单例模式是设计模式中的一种,它用于控制类的实例化过程,确保在整个应用程序中,对于特定类,只有一个实例存在。这种模式常被用来管理共享资源或者全局配置,以提高性能和减少系统间的耦合。 单例模式的核心在于...

    IOS应用源码——单例模式.zip

    在iOS应用开发中,单例模式是一种常用的软件设计模式,它保证了类只有一个实例,并提供一个全局访问点。这个模式在iOS中尤其常见,因为许多系统服务和组件就是通过单例来实现的,例如UIApplication、NSFileManager等...

    设计模式之单例模式Java实现和类设计图

    本次我们将深入探讨两种设计模式——单例模式和装饰模式,它们在Java编程中都有着广泛的应用。 首先,让我们来理解“单例模式”。单例模式是一种创建型设计模式,其核心思想是保证一个类只有一个实例,并提供一个...

Global site tag (gtag.js) - Google Analytics