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; }
相关推荐
如:IO处理,数据库操作等,由于这些对象都要占用重要的系统资源,所以我们必须限制这些实例的创建或始终使用一个公用的实例,这就是我们今天要介绍的——单例模式(Singleton)。 使用频率高 单件模式(Singleton...
**设计模式——单例模式** 在软件工程中,设计模式是一种在特定场景下解决常见问题的标准方案,可以被复用并提升代码质量。单例模式是设计模式中的一种,它保证一个类只有一个实例,并提供一个全局访问点。这种模式...
单例模式是软件设计模式中的一种经典模式,它保证了类在任何情况下都只有一个实例存在。这个模式在很多场景下非常有用,例如控制全局资源、管理配置信息等。本文将详细探讨单例模式的懒汉式实现,并结合源码进行解析...
策略模式和单例模式是软件设计中两种非常重要的设计模式,它们在实际开发中有着广泛的应用。在这篇文章中,我们将深入探讨这两种模式的核心概念、实现方式以及如何在实际项目中运用。 策略模式是一种行为设计模式,...
这个Singleton.rar文件很可能是包含了一个或多个使用了单例模式的iOS应用源代码示例。让我们深入探讨一下单例模式在iOS开发中的运用及其重要性。 首先,单例模式的主要优点在于它能有效地管理资源,特别是当资源...
其中,单例模式(Singleton Pattern)作为最简单的设计模式之一,旨在确保一个类只有一个实例,并提供一个全局访问点。尽管有些设计模式专家认为它过于简单而不能称为真正的“模式”,但单例模式因其简洁性和实用性...
单例模式是一种设计模式,用于确保一个类在整个应用程序中只存在一个实例。这种模式在Java中广泛应用于需要全局访问点或资源管理的场景,比如配置管理、数据库连接池等。下面将详细阐述单例模式的实现方式、优化策略...
这里我们将详细探讨标题中提到的两种单例模式——"懒汉式"(Lazy Initialization)和"饿汉式"(Eager Initialization)。 1. **饿汉式单例模式** 饿汉式单例的特点是类加载时就完成了实例化,确保了线程安全,但...
单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,比如控制共享资源、管理系统级别的服务或者简化对象间的交互。单例模式的核心在于...
**设计模式——单例模式** 单例模式是一种广泛应用于软件设计中的创建型设计模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于控制共享资源的访问,比如线程安全的数据库连接池...
内容概要:本文档介绍了三个经典的软件设计模式——单例模式(Singleton Pattern)、工厂模式(Factory Pattern)以及观察者模式(Observer Pattern)的具体实现,并给出了带有详细注释的C++代码范例。对每个设计模式都有...
本次将聚焦于一种较为简单的模式——单例模式。 #### 单例模式概述 单例模式是一种创建型模式,它的核心在于确保某个类只有一个实例,并提供一个全局可访问的访问点。这种模式非常实用,尤其是在需要频繁地创建和...
压缩包文件代码是一个常见的设计模式——单例模式(Singleton Pattern) 的 Python 实现。单例模式确保一个类只有一个实例,并提供一个全局访问点来获取该实例。这在需要控制资源访问或需要协调系统范围内的操作时...
设计模式是软件工程中的一种最佳实践,用于解决在不同场景下重复出现的问题。...通过阅读提供的"iOS 设计模式——单例"相关资料,可以深入理解在iOS开发环境中如何有效利用单例模式来优化代码结构和提高程序性能。
单例模式是软件设计模式中的一种经典模式,其主要目的是控制类的实例化过程,确保在任何情况下,一个类只有一个实例存在。这种模式通常用于管理共享资源或者全局配置,例如数据库连接池、线程池、日志服务等。在Java...
单例模式是设计模式中的一种,它用于控制类的实例化过程,确保在整个应用程序中,对于特定类,只有一个实例存在。这种模式常被用来管理共享资源或者全局配置,以提高性能和减少系统间的耦合。 单例模式的核心在于...
在iOS应用开发中,单例模式是一种常用的软件设计模式,它保证了类只有一个实例,并提供一个全局访问点。这个模式在iOS中尤其常见,因为许多系统服务和组件就是通过单例来实现的,例如UIApplication、NSFileManager等...
本次我们将深入探讨两种设计模式——单例模式和装饰模式,它们在Java编程中都有着广泛的应用。 首先,让我们来理解“单例模式”。单例模式是一种创建型设计模式,其核心思想是保证一个类只有一个实例,并提供一个...