单例模式是我们在开发软件的过程中经常用到的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. java web中filter分析

    摘自博客园,博主孤傲苍狼 一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp ...

  2. 1-学习GPRS_Air202(Air202开发板介绍)

    记得自己第一次实现远程通信是在学校里用SIM900A实现的,随着WIFI模块的普及自己就开始用WIFI模块了,当然WIFI模块已经用的很... WIFI模块要想实现远程控制必须连接路由器,其实在做王哥 ...

  3. Python中如何自定义一个计时器

    import time as t class MyTimer(): # 初始化构造函数 def __init__(self): self.prompt = "未开始计时..." s ...

  4. Linux下DIR,dirent,stat等结构体详解

    摘自:http://www.liweifan.com/2012/05/13/linux-system-function-files-operation/ 最近在看Linux下文件操作相关章节,遇到了这 ...

  5. window环境搭建zookeeper,kafka集群

    为了演示集群的效果,这里准备一台虚拟机(window 7),在虚拟机中搭建了单IP多节点的zookeeper集群(多IP节点的也是同理的),并且在本机(win 7)和虚拟机中都安装了kafka. 前期 ...

  6. JavaScript 对象JavaScript 对象

    JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... 此外,JavaScript 允许自定义对象. 所有事物都是对象 JavaScript 提供多个内建对象,比如 String. ...

  7. Sybase identity 字段

    1.identity Oracle, DB2, pgSQL中都有sequence的概念,这个概念比Identity先进很多,在Sybase中没有Sequence对象,与之相对应的是Identity 2 ...

  8. 有没有最好的学习Angularjs2的视频入门体验?

    Which are the best video tutorials for learning AngularJS 2? 有没有最好的学习Angularjs2的视频入门体验? 翻译来源:https:/ ...

  9. SQLite Insert 语句(http://www.w3cschool.cc/sqlite/sqlite-insert.html)

    SQLite Insert 语句 SQLite 的 INSERT INTO 语句用于向数据库的某个表中添加新的数据行. 语法 INSERT INTO 语句有两种基本语法,如下所示: INSERT IN ...

  10. android的activity栈管理

    在进行BlackBerry程序开发的时候,BlackBerry提供了一个管理Screen的栈,用来从任何地方来关闭位于最上一层的Screen,使用UiApplication.getUiApplicat ...