单例模式是我们在开发软件的过程中经常用到的23中常用的java模式之一,主要的功能就是保证我们所使用的对象只有一个,这也在一方面减少了出错的可能性,增强了代码的健壮。单例模式一般来说有两种实现的方式,一种称之为饿汉模式,另一中成为懒汉模式。饿汉模式顾名思义,就是来者不拒,全盘搞定嘛,请看代码:

package Singleton;

public class eHan {

    //1、首先必须将构造函数声明为私有的,用来防止外部代码直接访问
    private eHan(){

    }
    //2、声明一个静态的类属的成员变量,也就是我们的实例
    static eHan Singleton1=new eHan();

    //3、使用一个获得器来帮助外界获得此类的唯一的实例,必须是类属的静态方法
    public static eHan getInstance() {
        // TODO Auto-generated method stub
        return Singleton1;
    }
}

另外一种懒汉模式就是指只有当我们要使用这个对象的实例的时候,才会去创建它,就好比一个懒汉,只有当他饿的实在受不了的时候,他才会去找吃的。请看下面的代码:

package Singleton;

public class lanHan {

    //1、第一步仍然是将构造函数声明为私有的
    private lanHan() {
        // TODO Auto-generated constructor stub
    }

    //2、继续声明一个静态的类属的成员变量、
    static lanHan Singleton=new lanHan();

    //3、也通过使用一个获取器来获得此类的唯一的一个实例,必须是类属的静态方法
    public static lanHan getInstance(){
        if(Singleton==null){
            Singleton=new lanHan();
        }
        return Singleton;
    }

}

只有实践才是检验真理的唯一标准,下面请看:

package Singleton;

public class Test {

     public static void main(String []args){
         //恶汉模式
         eHan e1=eHan.getInstance();
         eHan e2=eHan.getInstance();
         if(e1==e2){
             System.out.println("e1与e2是同一个实例");
         }else{
             System.out.println("e1与e2不是一个实例");
         }

         //懒汉模式
         lanHan l1=lanHan.getInstance();
         lanHan l2=lanHan.getInstance();
         if(l1==l2){
             System.out.println("l1与l2是同一个实例");
         }else{
             System.out.println("l1与l2不是一个实例");
         }

     }
}

接下来是运行结果:

e1与e2是同一个实例
l1与l2是同一个实例

由上我们不难看出,我们使用‘==’来进行判断对象在内存中的存储位置,而不是对象的内容的相等性,最后得出单例模式确实只是创建了一个实例,所以我们对其的操作,也只是对一个对象的操作,这样大大的减少了出错的可能性,是我们的代码更加健壮。代码比较简单,但是思想值得借鉴。

Java单例模式之饿汉模式与懒汉模式的更多相关文章

  1. java单例模式(饿汉式和懒汉式)

    1 /* 2 * 设计模式:对问题行之有效的解决方式.其实它是一种思想. 3 * 4 * 1,单例设计模式 5 * 解决的问题:就是可以保证一个类在内容中的对象唯一性. 6 * 7 * 必须对于多个程 ...

  2. java 设计模式 单例模式之饿汉模式/懒汉模式 singleton pattern

    https://v.qq.com/x/page/e0364ung5zp.html 讲的不错, 关于 饿汉式单例模式 code Student 类: package com.test;//单例模式之   ...

  3. Java-设计模式-单例模式-饿汉模式、懒汉模式

    //-------------------------------------------------------------饿汉模式--开始----------------------------- ...

  4. java 单例模式之线程安全的饿汉模式和懒汉模式

    转载博主:thankyou https://blog.csdn.net/twj13162380953/article/details/53869983 理解: 饿汉式获取实例的步骤简单所以线程更安全. ...

  5. 设计模式-单例模式(Singleton Pattren)(饿汉模式和懒汉模式)

    单例模式(Singleton Pattren):确保一个类在整个应用中只有一个实例,并提供一个全局访问点. 实现要点: 1. 私有化构造方法 2. 类的实例在类初始化的时候创建 3. 提供一个类方法, ...

  6. java基础10 单例模式之饿汉式和懒汉式单例

    前言: 软件行业中有23中设计模式 单例模式    模版模式    装饰者模式    观察者模式    工厂模式    ........... 单例模式 1. 单例模式包括 1.1 饿汉式单例 1.2 ...

  7. java 懒汉式、饿汉式单例模式 不含多线程的情况

    //饿汉式 提前生成了单例对象 class Singleton{ private static final Singleton instance=new Singleton(); private Si ...

  8. 单例模式之懒汉模式,懒汉模式之高效模式,DLC双判断模式

    import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; imp ...

  9. java 开发中经常问到得懒汉模式 (单利模式)

    //懒汉模式 class Single { public static Single s = null; public Single (){} public static Single getInst ...

随机推荐

  1. Oracle中的4大空值处理函数用法举例

    nvl(exp1,exp2):                           如果exp1为空,则返回exp2:否则返回exp1nvl2(exp1,exp2,exp3):             ...

  2. LintCode题解之斐波纳契数列

    直接使用递归的方法会导致TLE,加个缓存就好了: public class Solution { private Integer[] buff = new Integer[1000]; /* * @p ...

  3. 关于java的Synchronized,你可能需要知道这些(上)

    对于使用java同学,synchronized是再熟悉不过了.synchronized是实现线程同步的基本手段,然而底层实现还是通过锁机制来保证,对于被synchronized修饰的区域每次只有一个线 ...

  4. B+树在磁盘存储中的应用

    欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 我们首先提一个问题, B+树比平衡二叉树在索引数据方面要快么? 大多数人可能认为肯定还是 ...

  5. Docker简介/安装/使用

    什么是Docker?docker是一个开源的应用容器引擎,系统级的轻量虚拟化技术.应用程序的自动化部署解决方案,能够迅速创建一个容器,并在容器上部署和运行应用程序,并通过配置文件可以轻松实现应用程序的 ...

  6. Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52835829 前言:上篇中,&l ...

  7. Dynamics CRM2016 Web API之创建记录

    前篇介绍了通过primary key来查询记录,那query的知识点里面还有很多需要学习的,这个有待后面挖掘,本篇来简单介绍下用web api的创建记录. 直接上代码,这里的entity的属性我列了几 ...

  8. BI Publisher(rtf)模板开发语法大全

    Rtf模板开发例如背景,纹理分栏等等功能都能用word工具实现不再具体总结大家可以参考word教程.....   一.组 定义一个组的目的是告诉XMLPublisher对重复的数据行进行循环显示,也就 ...

  9. ISP(Interface Segregation Principle),接口隔离原则

    ISP(Interface Segregation Principle),接口隔离原则 它要求如下: ①  一个类对另一个类的依赖性要建立在最小接口上. ②  使用多个专门的接口比使用单一的总接口要好 ...

  10. FFmpeg的HEVC解码器源代码简单分析:解析器(Parser)部分

    ===================================================== HEVC源代码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpe ...