Java单例模式之饿汉模式与懒汉模式
2015-10-17 21:46
603 查看
单例模式是我们在开发软件的过程中经常用到的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中HashTable和ConcurrentHashMap的区别
- 八张图理解Java
- Spring配置文件详解
- spring IOC源码分析(1)
- spring IOC源码分析(2)
- Java IO2:RandomAccessFile
- java中url中文编码问题
- Java里面知识点 总结
- java类与对象
- Java 正则表达式
- 常用 Java 静态代码分析工具的分析与比较
- java练习
- Spring 通过配置向 Quartz定时任务 注入service
- Java中的ConcurrentHashMap
- MyEclipse设置JAVA选中高亮显示
- java线程池的简单使用
- spring IOC源码分析(3)
- Java相对路径总结
- json对象转java对象
- struts2+ajax实现异步验证实现