`

单例模式Singleton某个类只需要一个类实例

阅读更多
保证一个类只有一个实例,并提供一个访问它的全局访问点。

懒汉式和饿汉式
懒汉式
public class Singleton {
  private static Singleton instance = null;

  private Singleton() {
  }
 
  public static synchronized Singleton getInstance() {
    if(instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
饿汉式
public class Singleton {
  private static Singleton instance = new Singleton();

  private Singleton() {
  }
 
  public static Singleton getInstance() {
    return instance;
  }
}
单例模式是用来保证这个类在运行期间只会被创建一个类实例。

这里的单例模式并不适用于集群环境。

懒汉模式体现了延迟加载和缓存的思想。

懒汉式是典型的时间换空间。即每次获取实例都会进行判断。
饿汉式是典型的空间换时间。

不加同步的懒汉式是线程不安全的。
实现线程安全:
1.加上synchronized,但是会降低访问的速度。
2.双重检查加锁。
if(instance == null) {
  synchronized(Singleton.class) {
    if(instance == null) {
      instance = new Singleton();
    }
  }
}

饿汉式是线程安全的。

更好的单例实现方式
public class Singleton {
  private static class SingletonHolder {
    private static Singleton instance = new Singleton();
  }
 
  private Singleton() {
  }

  public static Singleton getInstance() {
    return SingletonHolder.instance;
  }
}

单例模式的本质是控制实例数目。
分享到:
评论

相关推荐

    单例模式 Singleton Pattern

    - **单例类只能有一个实例**:这是单例模式的基本原则,确保在整个应用程序中只有一个实例存在。 - **单例类必须自己创建并提供唯一的实例**:这通常通过将构造函数设为私有来实现,防止外部直接创建实例。 - **单例...

    Qt qml Singleton 单例模式

    在Qt的Qml环境中,单例模式是一种设计模式,它允许在整个应用程序中创建一个全局访问点,确保某个类只有一个实例存在。这样的设计模式在需要共享数据或者服务时非常有用,避免了多处创建相同对象导致的数据不一致或...

    单例模式讲解说明与实例

    单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。 ...

    关于单例模式的知识要点

    单例模式是软件设计模式中的一种,其主要目的是控制类的实例化过程,确保一个类在整个应用程序中只有一个实例存在。这种模式在很多场景下都非常有用,例如管理共享资源、配置对象或者全局日志服务等。下面我们将深入...

    Singleton pattern单例模式应用

    单例模式(Singleton Pattern)是一种常用的软件设计模式,在系统中确保某个类只有一个实例,并提供一个全局访问点。这种模式通常用于控制资源的消耗,比如数据库连接、线程池等,以及确保某个系统配置的一致性。 #...

     单例设计模式Singleton1

    单例设计模式Singleton1是Java设计模式中的一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点。这个模式的核心知识点可以总结为三点: 1. ...

    singleton单例模式1

    首先,单例模式的要点是:① 某个类只能有一个实例。构造器私有化。② 它必须自行创建这个实例。含有一个该类的静态变量来保存这个唯一的实例。③ 它必须能向整个系统提供这个实例。 单例模式有两种实现方式:饿汉...

    Java设计模式之单例模式的七种写法

    单例模式是一种常见的设计模式,它确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机的驱动程序对象常被设计成单例。这些应用都或多或少...

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

    1.1.1 摘要 ...单例模式(Singleton)是几个创建模式中最对立的一个,它的主要特点不是根据用户程序调用生成一个新的实例,而是控制某个类型的实例唯一性,通过上图我们知道它包含的角色只有一个,

    单例模式详解

    单例模式详解 单例模式是 Java 设计模式中的一种常见...单例模式是一种常见的设计模式,旨在保证某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。选择单例模式就是为了避免不一致状态,避免政出多头。

    使用C++11实现线程安全的单例模式

    在C++编程中,单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。线程安全的单例模式在多线程环境下尤其重要,因为不正确的实现可能导致多个线程创建多个实例,这违反了单例模式...

    设计模式之单例模式源码demo

    单例模式是软件设计模式中的经典模式之一,其主要目的是控制类的实例化过程,确保在应用程序的整个生命周期中,某个类只有一个实例存在。这样的设计通常适用于那些需要频繁创建和销毁,但资源消耗较大的对象,如...

    list循环退出Activity,单例模式实现android的退出功能,代替广播,singleton

    单例模式是确保某个类只有一个实例,并提供一个全局访问点来获取这个实例的设计模式。 2. 在MyApplication类中定义了一个LinkedList集合activityList,用于存放所有的Activity实例。 3. MyApplication提供了...

    设计模式之单例模式(AS3实现)

    单例模式是软件设计模式中的一种经典模式,其主要目的是控制类的实例化过程,确保在程序运行过程中,对于某个类,全局只有一个实例存在。这种模式在资源管理、配置对象或者全局缓存等场景中非常常见。在ActionScript...

    Java设计模式-单例模式详解

    单例模式的目的是为了保证在一个进程中,某个类有且仅有一个实例。 实现单例模式的步骤: 1. 只有 private 构造方法,确保外部无法实例化; 2. 通过 private static 变量持有唯一实例,保证全局唯一性; 3. 通过 ...

    单例模式应用场景

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

    设计模式_创建型_单例模式.md

    单例模式的目的是确保一个类在任何时候都只有一个实例,并且提供一个全局访问点给外部程序使用。 ## 单例模式的定义 单例模式是一种常用的软件设计模式,通过单例模式可以保证系统中一个类只有一个实例,而且自行...

    场景管理单例模式1

    单例模式是一种创建型设计模式,使得类可以保证只有一个实例,并提供一个全局访问点来访问该实例。这个模式的主要目的是为了确保某个类只有一个实例,并且提供一个全局访问点来访问该实例。 场景管理单例模式的实现...

    单例模式.doc

    单例模式是一种常用的创建型设计模式,它的主要目的是确保某个类只有一个实例,并且提供一个全局访问点来获取该实例。这种模式适用于系统中只需要一个实例的情况,例如日志记录器、配置管理等。 #### 三、单例模式...

Global site tag (gtag.js) - Google Analytics