`
futeng
  • 浏览: 260474 次
  • 性别: 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 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个...

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

    4、单例模式(Singleton Pattern) 用意:仅允许生成一个对象时

    Singleton pattern单例模式应用

    Singleton pattern单例模式应用

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

    主要为大家详细介绍了C#单例模式Singleton Pattern的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

    主要介绍了C#单例模式(Singleton Pattern)的实现方法,主要讲述了即时加载的单例模式、延迟加载的单例模式与线程安全的单例模式,需要的朋友可以参考下

    .Net 单例模式(Singleton)

     单例模式 Singleton Pattern 问题解决: (1)单例模式简介: Singleton模式要求一个类有且仅有一个实例,并且提供了一个全局的访问点。这就提出了一个问题:如何绕过常规的构造器,提供一种机制来保证一个类只有...

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

    NULL 博文链接:https://lym6520.iteye.com/blog/695374

    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、模板...

    设计模式_单例模式.zip

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 学习demo

    单例模式(Singleton Pattern)

    单例模式(Singleton Pattern) 保证整个系统中,对于某个对象,只能存在一个对象实例,该类值提供一个获取器对象的方法 当我们频繁的创建和销毁对象,会消耗大量资源,当我们使用对象通过new,将产生大量的对象实例,而单例...

    [创建型模式] 单例模式(Singleton Pattern)

    一个类可以创建多个对象,这是面向对象的语言特性,想要实现单例模式,就要屏蔽这个特性,防止系统可以随意创建类的对象。 要做到这一点,通常做法就是利用private关键字将类的构造方法私有化,使外部调用者无法利用...

    常见设计模式—单例模式(Singleton)

    单例模式(Singleton Pattern)是设计模式中最简单的模式之一,属于创建型模式。这种设计模式主要是类的对象只有一个实例,不需要每次new 创造。而我们要做的的就是确保这个对象创建的唯一。然后根据一些特征进行...

    单例设计模式.pdf

    单例模式(Singleton Pattern)是 Java 中最常见的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

    java单例模式看这一篇就够了

    单例模式(Singleton Pattern)是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。单例模式属于创建型模式 单例模式的常见写法 一、饿汉式单例 顾名思义饿汉式单例是在类加载的时候就立即初始化...

    用Java实现23种设计模式

    单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2. 结构型模式 适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 过滤器模式(Filter、Criteria ...

    基于JavaScript实现单例模式

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个...

    24种设计模式与6大设计原则

    单例模式[SINGLETON PATTERN] 多例模式[MULTITION PATTERN] 工厂方法模式[FACTORY METHOD PATTERN] 抽象工厂模式[ABSTRACT FACTORY PATTERN] 门面模式[FACADE PATTERN] 适配器模式[ADAPTER PATTERN] 模板方法模式...

Global site tag (gtag.js) - Google Analytics