Java单例模式之饿汉模式与懒汉模式
单例模式是我们在开发软件的过程中经常用到的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单例模式之饿汉模式与懒汉模式的更多相关文章
- java单例模式(饿汉式和懒汉式)
1 /* 2 * 设计模式:对问题行之有效的解决方式.其实它是一种思想. 3 * 4 * 1,单例设计模式 5 * 解决的问题:就是可以保证一个类在内容中的对象唯一性. 6 * 7 * 必须对于多个程 ...
- java 设计模式 单例模式之饿汉模式/懒汉模式 singleton pattern
https://v.qq.com/x/page/e0364ung5zp.html 讲的不错, 关于 饿汉式单例模式 code Student 类: package com.test;//单例模式之 ...
- Java-设计模式-单例模式-饿汉模式、懒汉模式
//-------------------------------------------------------------饿汉模式--开始----------------------------- ...
- java 单例模式之线程安全的饿汉模式和懒汉模式
转载博主:thankyou https://blog.csdn.net/twj13162380953/article/details/53869983 理解: 饿汉式获取实例的步骤简单所以线程更安全. ...
- 设计模式-单例模式(Singleton Pattren)(饿汉模式和懒汉模式)
单例模式(Singleton Pattren):确保一个类在整个应用中只有一个实例,并提供一个全局访问点. 实现要点: 1. 私有化构造方法 2. 类的实例在类初始化的时候创建 3. 提供一个类方法, ...
- java基础10 单例模式之饿汉式和懒汉式单例
前言: 软件行业中有23中设计模式 单例模式 模版模式 装饰者模式 观察者模式 工厂模式 ........... 单例模式 1. 单例模式包括 1.1 饿汉式单例 1.2 ...
- java 懒汉式、饿汉式单例模式 不含多线程的情况
//饿汉式 提前生成了单例对象 class Singleton{ private static final Singleton instance=new Singleton(); private Si ...
- 单例模式之懒汉模式,懒汉模式之高效模式,DLC双判断模式
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; imp ...
- java 开发中经常问到得懒汉模式 (单利模式)
//懒汉模式 class Single { public static Single s = null; public Single (){} public static Single getInst ...
随机推荐
- java web中filter分析
摘自博客园,博主孤傲苍狼 一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp ...
- 1-学习GPRS_Air202(Air202开发板介绍)
记得自己第一次实现远程通信是在学校里用SIM900A实现的,随着WIFI模块的普及自己就开始用WIFI模块了,当然WIFI模块已经用的很... WIFI模块要想实现远程控制必须连接路由器,其实在做王哥 ...
- Python中如何自定义一个计时器
import time as t class MyTimer(): # 初始化构造函数 def __init__(self): self.prompt = "未开始计时..." s ...
- Linux下DIR,dirent,stat等结构体详解
摘自:http://www.liweifan.com/2012/05/13/linux-system-function-files-operation/ 最近在看Linux下文件操作相关章节,遇到了这 ...
- window环境搭建zookeeper,kafka集群
为了演示集群的效果,这里准备一台虚拟机(window 7),在虚拟机中搭建了单IP多节点的zookeeper集群(多IP节点的也是同理的),并且在本机(win 7)和虚拟机中都安装了kafka. 前期 ...
- JavaScript 对象JavaScript 对象
JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... 此外,JavaScript 允许自定义对象. 所有事物都是对象 JavaScript 提供多个内建对象,比如 String. ...
- Sybase identity 字段
1.identity Oracle, DB2, pgSQL中都有sequence的概念,这个概念比Identity先进很多,在Sybase中没有Sequence对象,与之相对应的是Identity 2 ...
- 有没有最好的学习Angularjs2的视频入门体验?
Which are the best video tutorials for learning AngularJS 2? 有没有最好的学习Angularjs2的视频入门体验? 翻译来源:https:/ ...
- SQLite Insert 语句(http://www.w3cschool.cc/sqlite/sqlite-insert.html)
SQLite Insert 语句 SQLite 的 INSERT INTO 语句用于向数据库的某个表中添加新的数据行. 语法 INSERT INTO 语句有两种基本语法,如下所示: INSERT IN ...
- android的activity栈管理
在进行BlackBerry程序开发的时候,BlackBerry提供了一个管理Screen的栈,用来从任何地方来关闭位于最上一层的Screen,使用UiApplication.getUiApplicat ...