希望只生成某个类的一个对象的时候,可以使用该模式来定义类。
如:线程池,日志记录,设备驱动等
一、单线程
示例代码:
class Singleton{
private static Singleton sl;
private Singleton(){}
public static Singleton getInstance(){
if(sl == null){
sl=new Singleton();
}
return sl;
}
}
public class SingletonTest{
public static void main(String[] args){
Singleton s1=Singleton.getInstance();
Singleton s2=Singleton.getInstance();
if(s1==s2)
System.out.println("Same!");
}
}
执行结果:
C:\javastudy>java SingletonTest
Same!
C:\javastudy>
二、多线程
如果该类用于多线程,那么需要对前面的程序加以改造,也就是让它保证线程安全。
示例代码1:
当多个线程同时执行时,保证不会有两个线程同时进入getInstance方法,从而也就保证了多线程的情况下,也只会生成一个Singleton类的实例。
class Singleton{
private static Singleton sl;
private Singleton(){}
public static
synchronized Singleton getInstance(){
if(sl == null){
sl=new Singleton();
}
return sl;
}
}
public class SingletonTest{
public static void main(String[] args){
Singleton s1=Singleton.getInstance();
Singleton s2=Singleton.getInstance();
if(s1==s2)
System.out.println("Same!");
}
}
执行结果:
C:\javastudy>java SingletonTest
Same!
C:\javastudy>
还有一种方法,不用通过synchronized也能保证线程安全。
因为sl是static型的,所以JVM在装载Singleton类的时候就会创建实例。
从而个线程调用getInstance方法时,只是返回相同的句柄而已,从而实现了线程安全的目的。不过这种方法总是会创建Singleton类的一个实例。因为类一被加载就会创建一个实例。
示例代码2:
class Singleton{
private static Singleton sl=new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return sl;
}
}
public class SingletonTest2{
public static void main(String[] args){
Singleton s1=Singleton.getInstance();
Singleton s2=Singleton.getInstance();
if(s1==s2)
System.out.println("Same!");
}
}
执行结果:
C:\javastudy>java SingletonTest2
Same!
C:\javastudy>
分享到:
相关推荐
**Singleton设计模式** Singleton设计模式是软件工程中最常用的设计模式之一,它的主要目的是确保一个类只有一个实例,并提供全局访问点。在Java中,Singleton模式的实现有多种方式,每种方式都有其优缺点,我们将...
Singleton 设计模式是一种常用的设计模式,它用于控制类的实例化过程,确保在整个应用程序中,一个类只有一个实例存在。这种模式常被用于那些需要频繁创建和销毁,且必须全局共享的对象,例如数据库连接、线程池、...
Singleton设计模式是一种创建型设计模式,它的核心目标是确保在应用程序中只有一个类的实例,并提供一个全局访问点来获取这个唯一实例。这种模式在资源管理、缓存、日志记录、线程池等场景中广泛应用。 ### 单态...
这里我们将深入探讨三种常见的Java设计模式:单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。 **单例模式(Singleton)** 单例模式确保一个类只有一个实例,并提供一个全局访问点...
本知识点主要以 Adapter、Abstract Factory、Singleton、Bridge 和 Prototype 设计模式为例,结合UML来说明如何使用UML来描述这些设计模式。 **Adapter设计模式** Adapter 模式(适配器模式),主要用于两个不兼容...
Singleton设计模式是软件工程中常用的一种模式,它确保一个类只有一个实例,并提供全局访问点。在C++中,实现Singleton模式需要特别注意线程安全、初始化顺序和防止多实例问题。接下来,我们将深入探讨如何正确地在...
### 最简单的设计模式学习:Singleton模式 #### 一、Singleton模式简介 Singleton(单例)模式是一种常用的软件设计模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在许多场合下非常...
在Qt的Qml环境中,单例模式是一种设计模式,它允许在整个应用程序中创建一个全局访问点,确保某个类只有一个实例存在。这样的设计模式在需要共享数据或者服务时非常有用,避免了多处创建相同对象导致的数据不一致或...
《C#设计模式之Singleton模式详解》 Singleton模式是软件设计模式中的一种基础模式,它在众多设计模式中占有重要地位,尤其在C#编程中经常被应用。Singleton模式的主要目的是确保一个类只有一个实例,并提供一个...
当前文档主要讨论的是Java编程中的Singleton设计模式,这是一种在软件工程中用于控制类的实例化过程,确保在程序运行期间,某类只有一个实例存在的设计模式。Singleton模式在很多场景下非常有用,例如数据库连接池、...
Singleton模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个唯一的实例。这种模式在需要控制资源的唯一性或者全局访问点时非常有用,比如数据库连接、线程池或者缓存管理等。 ...
在Qt框架中,Singleton是一种设计模式,用于确保一个类只有一个实例,并提供全局访问点。Singleton模式在许多场景下非常有用,比如配置管理、...这个简单的代码演示展示了如何在Qt环境中有效地应用Singleton设计模式。
设计模式-Singleton与Factory
Singleton模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,例如管理共享资源,如数据库连接池,或者确保某个对象在整个系统中的唯一性。下面我们...
单例模式是软件设计模式中的一种经典模式,它在许多场景下被广泛使用,尤其是在需要全局唯一实例的情况下。本文将深入探讨单例模式的概念、作用、实现方式以及其在实际编程中的应用。 单例模式的核心思想是确保一个...
在本书中,作者罗伟富通过 Python 实现了 23 种经典设计模式,包括 Singleton 模式、Factory 模式、Observer 模式等。这些模式可以帮助开发者更好地解决软件开发中的常见问题,例如对象的创建、结构的设计、行为的...
Singleton模式是一种常用的软件设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点。这种模式在系统中经常被用于控制对共享资源(如数据库连接、日志对象等)的访问。正确地实现Singleton模式对于提高代码...
**设计模式之Singleton(单例模式)** 在软件工程中,设计模式是解决常见问题的模板,它们代表了经过时间考验的最佳实践。Singleton模式是一种创建型设计模式,它保证一个类只有一个实例,并提供一个全局访问点来...