`
futeng
  • 浏览: 263722 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

单例模式(Singleton pattern)四种实现

阅读更多
PART 1 快速预览

  • 单例实现1:经典单例模式(Classic singleton pattern)

  1. 实现延迟实例化(Lazy instantiaze);线程不安全(thread-unsafe)
  2. 可用来学习单例模式思想,但是因为线程不安全,所以不建议使用

/**
 * Classic singleton pattern     
 * @author <a href="mailto:ifuteng@gmail.com">futeng</a>
 */
public class Singleton {
      // private static variable
      private static Singleton singleton;
      
      // private constructor
      private Singleton() {
             // do something useful such as initialized data
      }
      
      // provides a global point of access to it
      public static Singleton getInstance() {
             if ( singleton == null) {
                   singleton = new Singleton();
            }
             return singleton;
      }
}


  • 单例实现2:对方法同步加锁式单例(Synchronized method singleton pattern)

  1. 实现延迟实例化(Lazy instantiaze);线程安全(thread safe);每次访问都要等候别的线程离开该方法,性能低。
  2. 解决了经典单例模式线程不安全的问题,但是性能低下,所以不建议使用

/**
 * Synchronized method singleton pattern     
 * @author <a href="mailto:ifuteng@gmail.com">futeng</a>
 */
public class Singleton {

      private static Singleton singleton;
      
      private Singleton() {}
      
      public static synchronized Singleton getInstance() {
             if ( singleton == null) {
                   singleton = new Singleton();
            }
             return singleton;
      }
}


  • 单例实现3:无延迟实例化式单例(Eagerly instantiaze singleton pattern)

  1. 非延迟实例化(eagerly instantiaze);线程安全(thread safe);
  2. 在类加载的第一时间被初始化,大部分场景都可胜任。丢失了延迟实例化特性,这带来的遗憾是还未被调用就已经实例化了。

/**
 * Eagerly singleton pattern     
 * @author <a href="mailto:ifuteng@gmail.com">futeng</a>
 */
public class Singleton {
 
      private static Singleton singleton = new Singleton();
      
      private Singleton() {}
      
      public static synchronized Singleton getInstance() {
             return singleton;
      }
}


  • 单例实现4:双重检测加锁式单例(Double-checked locking singleton pattern)

  1. 实现延迟实例化(Lazy instantiaze);线程安全(thread safe);
  2. 最佳的单例实现,稍微复杂。

/**
 * Double checked singleton pattern     
 * @author <a href="mailto:ifuteng@gmail.com">futeng</a>
 */
public class Singleton {
      
      private volatile static Singleton singleton = new Singleton();
      
      private Singleton() {}
      
      public static Singleton getInstance() {
             if ( singleton == null) {
                   synchronized (Singleton. class) {
                         if ( singleton == null) {
                               singleton = new Singleton();
                        }
                  }
            }
             return singleton;
      }
}


PART 2 细细品鉴
分享到:
评论

相关推荐

    单例模式 Singleton Pattern

    ### 单例模式 Singleton Pattern #### 概述 单例模式是一种常见的设计模式,属于创建型模式之一。这种模式的核心在于确保某个类只有一个实例存在,并且提供一个全局访问点来获取该实例。单例模式在Java开发中尤其...

    通过go语言实现单例模式(Singleton Pattern).rar

    在Go语言中,实现单例模式(Singleton Pattern)通常涉及确保一个类只有一个实例,并提供一个全局访问点来获取该实例。由于Go语言没有传统的类和对象概念,但具有结构体(struct)和函数,我们可以通过使用包级变量...

    Singleton pattern单例模式应用

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

    创建型模式之单例模式(Singleton Pattern)

    单例模式是软件设计模式中的一种,属于创建型模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常有用,例如管理共享资源、配置对象或者缓存服务等。 单例模式的核心...

    c++-设计模式之单例模式(Singleton Pattern)

    单例模式(Singleton Pattern)是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于需要全局共享资源的场景,比如配置管理、日志记录等。 单例模式的组成 私有构造函数:防止外部...

    设计模式 之 “单例模式[Singleton Pattern]”

    **单例模式(Singleton Pattern)**是软件设计模式中的一种基础模式,它的核心思想是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如配置管理、线程池、数据库连接池等,这些都...

    单例模式Singleton

    单例模式(Singleton Pattern)是一种常用的软件设计模式,它的核心思想是确保一个类在整个应用程序中只有一个实例存在,并提供一个全局访问点来获取这个实例。这种模式在很多场景下非常有用,比如管理系统资源、...

    C#单例模式(Singleton Pattern)详解

    C#单例模式(Singleton Pattern)是一种常用的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。下面我们将详细介绍C#单例模式的定义、实现和优化。 单例模式的定义: 单例模式的主要目的是确保一个...

    JAVA单例模式的几种实现方法

    ### JAVA单例模式的几种实现方法 #### 一、饿汉式单例类 饿汉式单例类是在类初始化时就已经完成了实例化的操作。这种实现方式简单且线程安全,因为实例化过程是在编译期间完成的,不会受到多线程的影响。 **代码...

    设计模式-Java单例模式的各种实现实例

    单例模式(Singleton Pattern)是一种常用的软件设计模式,它保证一个类仅有一个实例,并提供一个访问该实例的全局访问点。这种模式通常用于需要频繁地创建和销毁的对象,以减少系统性能开销。 单例模式的优点: ...

    C#单例模式(Singleton Pattern)实例教程

    本文以实例形式讲述了C#单例模式(Singleton Pattern)的实现方法,分享给大家供大家参考。具体实现方法如下: 一般来说,当从应用程序全局的角度来看,如果只允许类的一个实例产生,就可以考虑单例模式。 1.即时加载...

    通过javascript实现单例模式.rar

    在JavaScript中,单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取该实例。在JavaScript中实现单例模式通常涉及使用一个对象字面量或创建一个包含实例的...

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    3、单例模式SINGLETON PATTERN 4、多例模式MULTITION PATTERN 5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板...

    Head First 设计模式 (五) 单件模式(Singleton pattern) C++实现

    在C++中实现单例模式有多种方法,下面我们将详细介绍几种常见的实现方式: 1. **静态成员变量法**: 这是最常见的一种实现方式,通过将实例声明为类的静态成员变量来保证只有一个实例存在。例如: ```cpp class ...

    设计模式_单例模式.zip

    单例模式是软件设计中的一种常见模式,它的主要目的是确保一个类只有一个实例,并提供全局访问点。这样的设计在很多场景下都非常有用,比如配置管理、线程池、缓存服务等,因为这些服务通常只需要一个实例来协调整个...

    Java单例模式应用研究.pdf

    单例模式(Singleton Pattern)作为一种最基本的创建型设计模式,其主要目的是控制一个类的实例化过程,确保在整个应用程序中仅存在一个实例,并且该实例能够被全局访问。这种模式在实际软件开发中有着极其广泛的应用...

    单例模式应用场景

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

    第6讲_单例模式(Singleton)

    单例模式(Singleton Pattern)是一种常用的软件设计模式,它的核心意图是确保一个类在整个系统中只有一个实例,并提供一个全局访问点。这样的设计可以避免资源浪费,尤其在处理那些需要共享状态且频繁使用的对象时...

    单例模式详解

    单例模式(Singleton Pattern)是一种常用的软件设计模式,属于创建型模式之一。其目的是确保某个类只有一个实例,并提供一个全局访问点。单例模式的核心在于确保在系统运行期间一个类只能有一个实例存在。 #### 二...

    为什么要使用PHP单例模式及应用实例.docx

    单例模式(Singleton Pattern)是一种常见的设计模式,在软件工程中被广泛应用于确保一个类仅有一个实例,并且该实例可以被全局访问。具体到PHP环境中,单例模式的关键点如下: 1. **唯一实例**:确保类只有一个...

Global site tag (gtag.js) - Google Analytics