学习java中的单例模式(Singleton)

原创 2016年05月31日 21:41:22

今天也是在学习Android-CleanArchitecture-master的demo(学习这个的框架),在看源码的时候,发现了一个我之前没有看过的引用:import javax.inject.Singleton;。于是googl搜索了一下。


在维基百科有非常简单明了的介绍(官网网址:单例模式),下面把内容复制过来,方便不能看到的同学学习。


维基原文:


单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。


实现单例模式的思路是:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。


单例模式在多线程的应用场合下必须小心使用。如果当唯一实例尚未创建时,有两个线程同时调用创建方法,那么它们同时没有检测到唯一实例的存在,从而同时各自创建了一个实例,这样就有两个实例被构造出来,从而违反了单例模式中实例唯一的原则。 解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁(虽然这样会降低效率)。


构建方式

通常单例模式在Java语言中,有两种构建方式:

  • 懒汉方式。指全局的单例实例在第一次被使用时构建。
  • 饿汉方式。指全局的单例实例在类装载时构建。

例子

Java语言中,单例模式(饿汉模式)应用的例子如下述代码所示:

  public class Singleton {
    private final static Singleton INSTANCE = new Singleton();
  
    // Private constructor suppresses   
    private Singleton() {}
 
    // default public constructor
    public static Singleton getInstance() {
        return INSTANCE;
    }
  }

Java编程语言中,单例模式(懒汉模式)应用的例子如下述代码所示 (此种方法只能用在JDK5及以后版本(注意 INSTANCE 被声明为 volatile),之前的版本使用“双重检查锁”会发生非预期行为[1]):

  public class Singleton {
    private static volatile Singleton INSTANCE = null;
  
    // Private constructor suppresses 
    // default public constructor
    private Singleton() {}
  
    //thread safe and performance  promote 
    public static  Singleton getInstance() {
        if(INSTANCE == null){
             synchronized(Singleton.class){
                 //when more than two threads run into the first null check same time, to avoid instanced more than one time, it needs to be checked again.
                 if(INSTANCE == null){ 
                     INSTANCE = new Singleton();
                  }
              } 
        }
        return INSTANCE;
    }
  }

注:还有其他语言的实现版本,目前只黏贴java版本过来。

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

学习java中的单例模式(Singleton)

今天也是在学习Android-CleanArchitecture-master的demo(学习这个的框架),在看源码的时候,发现了一个我之前没有看过的引用:import javax.inject.Si...

java中单例模式singleton

单例模式:在上下文中只有一个对象的实例。 应用场景:线程池,缓存等一个系统只需要一个的场景。三种常见单例模式: 1. 延迟单例模式public class Singleton { priv...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

模式学习之单例模式:Singleton

单例模式是为了作为资源管理器管理资源之用,这些资源包括:打印机,资源文件(Properties) 单例模式可以分为以下几种: 1.饿汉模式(Eager Singleton)      饿汉模式,是利用...

Java中的单例设计模式Singleton

单例模式:则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点。 核心的知识点: 1.private构造方法,防止通过new关键字,实例化出实例来。 2.再其内部产生该类的...

java 单例模式 (Singleton)

概要  单例模式是最简单的设计模式之一,但是对于Java的开发者来说,它却有很多缺陷。在本月的专栏中,David Geary探讨了单例模式以及在面对多线程(multithreading)、类装载器(c...

JAVA中的单例设计(Singleton)模式

一、单例模式有以下特点: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。   二、懒汉式 //懒汉式单例类.在第一次调用的时候实例化自己...

java singleton单例模式

单实例Singleton设计模式可能是被讨论和使用的最广泛的一个设计模式了,这可能也是面试中问得最多的一个设计模式了。这个设计模式主要目的是想在整个系统中只能出现一个类的实例。这样做当然是有必然的,比...

Java单例模式Singleton

Singleton是一种创建性模型,它确保只产生一个实例,并提供一个访问它的全局访问点,对于有些类来说,确保只有一个实例是很重要的,比如有的时候数据库的连接、Socket连接要受到一定的限制,必须确保...

Java单例模式(Singleton)

单例模式主要用于:有一些对象我们只需要一个,比如:线程池、缓存、对话框、处理偏好设置、注册表对象、日志对象以及配置文件对象、数据库连接对象等等。单例模式常用于管理共享资源,例如:数据库连接或者线程池。...

Java Singleton 单例模式

转自:http://hi.baidu.com/lucene1853/item/db11b914987bce0dd1d66d78 首先了解一下Singleton模式通常的两种表现形式: 第一...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)