java 单例模式(懒汉式与饿汉式)

java 单例模式

单例模式是一种常用的软件设计模式。在它的可信结构中只包含一个被实例化单例的特殊类。通过单例设计模式可以把整系统中的一个类只有一个实例。

单例设计模式又分为两种方式,懒汉式和饿汉式。

(1)懒汉式,就是只有当调用getInstance的时候,才会初始化这个单例。

(2)饿汉式,就是一旦加载好类,就把单例初始化完成。即是调用getInstance的时候,单例是已经存在了。

代码如下:

懒汉式单例

/**
 * Description:
 * 一、设计了一个懒汉式单例
 *
 * @author lee
 * */
public class SingleMode {

  public static SingleMode s = null;
  /**
   * Description:
   * 私有化构造函数
   *
   * */
  private SingleMode(){} 

  /**
   * Description:
   * 提供一个方法来获取该单例
   *
   * @return s 返回一个单例
   * */
  public static SingleMode getInstance(){

    //保证了线程安全,又减轻了资源加载和性能上的负担
    //即是在创建一次对象后,不再需要线程锁了。
    if(s==null){
      synchronized(""){
        if(s==null){
          s = new SingleMode();
        }
      }
    }

    return s;
  }

}

饿汉式单例

/**
 * Description:
 * 二、设计了一个饿汉式单例
 *
 * @author lee
 * */
class SingleMode1{
  public static final SingleMode1 s = new SingleMode1();

  /**
   * Description:
   * 私有化构造函数
   *
   * */
  private SingleMode1(){}

  /**
   * Description:
   * 提供一个方法来获取该单例
   *
   * @return s 返回一个单例
   * */
  public static SingleMode1 getInstance(){
    return s;
  }

}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • 单例模式垃圾回收_动力节点Java学院整理

    讨论命题:当一个单例的对象长久不用时,会不会被jvm的垃圾收集机制回收. 首先说一下为什么会产生这一疑问,笔者本人再此之前从来没有考虑过垃圾回收对单例模式的影响,直到去年读了一本书,<设计模式之禅>秦小波著.在书中提到在j2ee应用中,jvm垃圾回收机制会把长久不用的单例类对象当作垃圾,并在cpu空闲的时候对其进行回收.之前读过的几本设计模式的书,包括<Java与模式>,书中都没有提到jvm垃圾回收机制对单例的影响.并且在工作过程中,也没有过单例对象被回收的经历,加上工作中很多前辈

  • java 单例模式(饿汉模式与懒汉模式)

    java 单例模式 饿汉式单例 对于饿汉模式,我们可这样理解:该单例类非常饿,迫切需要吃东西,所以它在类加载的时候就立即创建对象. 懒汉式单例类 对于懒汉模式,我们可以这样理解:该单例类非常懒,只有在自身需要的时候才会行动,从来不知道及早做好准备.它在需要对象的时候,才判断是否已有对象,如果没有就立即创建一个对象,然后返回,如果已有对象就不再创建,立即返回. 单例设计模式常用于JDBC链接数据库 注意: 1 我们常用的是第一种饿汉式,因为: (1)既然采用了单例设计模式,就是为了使用单例类的对象

  • java设计模式之单例模式解析

    单例模式是最简单但同时也是很重要的一种设计模式,优点有以下几个方面: 1.当内存占用特别大的类需要频繁地创建销毁时,单例模式可以节省内存和提高性能,例如myBatis里面的sessionFactory 2.当需要对文件做单一读写时,例如同一时间只能同时写入一个windows文本文件,则需要用单例来避免多重读写 缺点是: 1.单例模式没有接口,很难对其进行拓展. 2.不利于测试,没办法直接根据接口mock出一个对象出来测试 最后说下其实现方式主要有饿汉模式和懒汉模式.其中懒汉模式又可以细分为几种,

  • JAVA 枚举单例模式及源码分析的实例详解

    JAVA 枚举单例模式及源码分析的实例详解 单例模式的实现有很多种,网上也分析了如今实现单利模式最好用枚举,好处不外乎三点: 1.线程安全 2.不会因为序列化而产生新实例 3.防止反射攻击但是貌似没有一篇文章解释ENUM单例如何实现了上述三点,请高手解释一下这三点: 关于第一点线程安全,从反编译后的类源码中可以看出也是通过类加载机制保证的,应该是这样吧(解决) 关于第二点序列化问题,有一篇文章说枚举类自己实现了readResolve()方法,所以抗序列化,这个方法是当前类自己实现的(解决) 关于

  • Java单例模式简单示例

    本文实例讲述了Java单例模式.分享给大家供大家参考,具体如下: 在实际开发的时候会有一些需求,在某个类中只能允许同时存在一个对象.这时就需要用到单例模式.代码如下 package org.aaa; public class ex { private static ex e; public static ex getEx() { if (e == null) { e=new ex(); } return e; } private ex() { System.out.println("执行单立模式

  • java设计模式之单例模式的详解及优点

    java设计模式之单例模式 定义:如果一个类始终只能创建一个实例,那么这个类被称为单例类,这种设计模式被称为单例模式. Spring框架里面可以将所有生成的bean对象都设置为单例模式,只需要在配置Bean实例时指定scope="singleton"即可,或者不做配置默认即为单例模式. 我们可以创建一个小的Demo来演示单例模式的实现,只需要保证该类只能创建一个实例,我们可以用权限修饰符private修饰该类的构造器. 提供一个创建该类的接口,该接口只能用static修饰,类里面创建一

  • 详解java 单例模式及方法总结

    java设计模式--单例模式  单例设计模式 Singleton是一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点. 核心知识点如下: (1) 将采用单例设计模式的类的构造方法私有化(采用private修饰). (2) 在其内部产生该类的实例化对象,并将其封装成private static类型. (3) 定义一个静态方法返回该类的实例. /** * 方法一 * 单例模式的实现:饿汉式,线程安全 但效率比较低 */ pu

  • Java中的四种单例模式浅析

    前言 近期在做支付,一开始图省事,也是为了调试方便,支付的alipayClient和tradeService都是使用的时候去拿,这样就会导致创建多次.为了节省资源,统一配置成单例模式. 什么是单例 Singleton(单例)是设计模式的一种,为了保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例特点 单例类确保自己只有一个实例(构造函数私有:不被外部实例化,也不被继承). 单例类必须自己创建自己的实例. 单例类必须为其他对象提供唯一的实例. 单例应用 资源管理器,回收站,打印机资源,线

  • java 单例模式(懒汉式与饿汉式)

    java 单例模式 单例模式是一种常用的软件设计模式.在它的可信结构中只包含一个被实例化单例的特殊类.通过单例设计模式可以把整系统中的一个类只有一个实例. 单例设计模式又分为两种方式,懒汉式和饿汉式. (1)懒汉式,就是只有当调用getInstance的时候,才会初始化这个单例. (2)饿汉式,就是一旦加载好类,就把单例初始化完成.即是调用getInstance的时候,单例是已经存在了. 代码如下: 懒汉式单例 /** * Description: * 一.设计了一个懒汉式单例 * * @aut

  • Java设计模式之单例模式实例详解【懒汉式与饿汉式】

    本文实例讲述了Java设计模式之单例模式.分享给大家供大家参考,具体如下: 单例模式就是产生一个对象实例,供外外部访问. 它的应用场景就是在这个类在全局真资源需要统一访问,否则会造成混乱时,才有必要设计成单例. 懒汉式,就是在使用这个对象时,才去查看这个对象是否创建,如果没创建就马上创建,如果已经创建,就返回这个实例. 饿汉式,在加载这个类的时候就先创建好一个对象实例,等待调用. 两者的优缺点也能猜到,使用懒汉式,在反应速度上肯定要比饿汉式慢. 但是这个对象如果不被调用,那就节省了cpu和内存资

  • java 中单例模式饿汉式与懒汉式的对比

    java 中单例模式饿汉式与懒汉式的对比 概念: 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 以前我们的做法是设置一个全局变量,也就是让它使得一个对象被访问.但是它不能防止你实例多个对象.这时我们可以让类自身负责保存它的唯一实例,这个类可以保证没有其他实例可以被创建,并且提供一个访问该实例的方法. 通过上面的描述,我们可以看到单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 因此,创建一个类的实例

  • Java实现单例模式之饿汉式、懒汉式、枚举式

    单例模式的实现(5种) 常用: 饿汉式(线程安全,调用效率高,但是不能延时加载) 懒汉式(线程安全,调用效率不高,可以延时加载) 其他: 双重检测锁式(由于jvm底层内部模型原因,偶尔会出问题,不建立使用) 静态内部类式(线程安全,调用效率高,但是可以延时加载) 枚举单例(线程安全,调用效率高,不能延时加载) 饿汉式单例具体代码如下: package com.lcx.mode; /** * * 饿汉式单例,不管以后用不用这个对象,我们一开始就创建这个对象的实例, * 需要的时候就返回已创建好的实

  • Java单例模式简单介绍

    一.概念 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案.就笔者认为,单例就是不让外界创建对象. 1.1概念剖析 对于单例的话,从上面的概念剖析,应该满足下面的几个条件: 第一:单例类中只能有一个单例对象: 第二:单例类必须自己创建自己的唯一实例对象: 第三:这个实例对象能够给外界访问到,

  • java 单例模式容易忽略的细节

    java单例模式 直接讲实现单例模式的两种方法:懒汉式和饿汉式,单例模式的概念自己上网搜吧这里就不讲了! 这里会涉及到java中的jvm,如果你没有这方面的知识,我建议你先去补补,不然会有点迷糊! 首先说说类什么时候进行加载? java虚拟机没有进行强制性的约束,但是对于初始化却严格规定了有且只有4种情况必须先对类进行初始化. 我们要知道的是在类加载的过程中,加载.验证.准备是在初始化之前完成的,所以进行了初始化,加载.验证.准备自然就在之前完成了. 然后这四种情况是分别遇到 new . get

  • Java单例模式分析

    目录 单例模式 为什么要用单例 单例的关键点 几种写法 懒汉式 饿汉式 静态内部类写法 枚举单例 容器实现单例 参考 总结 单例模式 为什么要用单例 确保某个类只有一个对象,常用于访问数据库操作,服务的配置文件等. 单例的关键点 1.默认构造函数为private,复制构造函数和复制赋值函数也要private或=delete禁用.(做到无法被外部其他对象构造) 2.通过一个静态方法或枚举返回单例类对象. 3.确保多线程的环境下,单例类对象只有一个. 几种写法 本文主要介绍C++的懒汉式和饿汉式写法

  • java单例模式使用详解

    单例模式想必大家都已经很熟悉了,通常它的实现方式分为以下两种: 复制代码 代码如下: //懒汉式实现public class Singleton{    private static Singleton instance = null;        private Singleton(){}    public static newInstance(){        if(null == instance){            instance = new Singleton();   

  • Java多线程案例之单例模式懒汉+饿汉+枚举

    目录 前言: 1.单例模式概述 2.单例模式的简单实现 2.1饿汉模式 2.2懒汉模式 2.3枚举实现单例模式 前言: 本篇文章将介绍Java多线程中的几个典型案例之单例模式,所谓单例模式,就是一个类只有一个实例对象,本文将着重介绍在多线程的背景下,单例模式的简单实现. 1.单例模式概述 单例模式,是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例,即一个类只有一个对象实例. 单例模式有两种典型的实现,一是饿汉模式

随机推荐