博客
关于我
Java常用设计模式之单例模式
阅读量:332 次
发布时间:2019-03-04

本文共 1536 字,大约阅读时间需要 5 分钟。

单例设计模式

一、概念叙述

单例模式是一种常用的软件设计模式,使用单例模式,可以保证为一类只生成唯一的实例对象。也就是说,整个程序空间中,该类只存在一个实例对象。

二、先看个问题

我们通常在实例化对象是,通常是通过去new构造器方法获取一个类的实例化对象。这样就会出现一个问题:那就是每次创建的实例对象的内存地址都不一样。

public class Student {   	private String name;	public String getName() {   		return name;	}	public void setName(String name) {   		this.name = name;	}}

在这里插入图片描述

接下来单例模式就可以解决这个问题。

三、单例模式实现

(一)、饿汉模式

package 单例模式;/** * 饿汉模式 * 1、初始化类对象 * 2、私有化构造器 * 3、通过静态方法还会 */public class Student {   //	初始化对象,当类加载时,就已经把student对象加载到了内存中	private static Student student = new Student();	private String name;//	第一步私有化构造器	private Student() {   			}//	通过静态方法返回对象	public static Student getInstance() {   		return student;	}}

在这里插入图片描述

饿汉模式特点: 执行效率较高,会占用稍稍占用一点内存空间

(二)、懒汉模式

package 单例模式;/* * 懒汉式 * 1、先去创建对象 * 2、私有化构造 * 3、静态方法实例化对象,并返回 * */public class Student1 {   //	先创建对象,不去实例化对象	private static Student1 student1 = null;//	私有构造	private Student1() {   			}//	静态方法返回对象	private static Student1 getInstance() {   //		当该方法被调用的时候再去实例化对象		if(student1 == null) {   			student1 = new Student1();		}		return student1;	}}

在这里插入图片描述

懒汉模式特点: 懒汉模式不支持多线程,只支持单线程,不能保证线程的安全性

(三)、双重校验锁

双重校验锁就是解决懒汉模式不支持多线程的问题,我们来分析一下为什么懒汉模式不支持多线程!

在这里插入图片描述
双重校验锁
在这里插入图片描述
具体实现

package 单例模式;/* * 双重校验锁 * */public class Student1 {   //	先创建对象,不去实例化对象	private static Student1 student1 = null;//	私有构造	private Student1() {   			}//	静态方法返回对象	public static Student1 getInstance() {   //		当该方法被调用的时候再去实例化对象		if(student1 == null) {   //			设置同步代码块			synchronized (Student1.class) {   //				再一次进行判断				if(student1 == null) {   					student1 = new Student1();				}			}		}		return student1;	}}

在这里插入图片描述

转载地址:http://ozhh.baihongyu.com/

你可能感兴趣的文章
MySQL错误日志(Error Log)
查看>>
oracle使用DBMS_RANDOM包生成随机数据
查看>>
C++高精度模板
查看>>
解决:angularjs radio默认选中失效问题
查看>>
windows环境下安装zookeeper(仅本地使用)
查看>>
缓冲区溢出实例(一)--Windows
查看>>
Badboy录制脚本时,提示脚本错误的解决方法
查看>>
PHP一句话木马小总结与SQL语句写一句话木马
查看>>
关于计数排序
查看>>
Python中字符串前添加r ,b, u, f前缀的含义
查看>>
Hadoop学习笔记—Yarn
查看>>
JSONPath小试牛刀之Snack3
查看>>
Jenkins - 部署在Tomcat容器里的Jenkins,提示“反向代理设置有误”
查看>>
2017年前端框架、类库、工具大比拼
查看>>
wxWidgets源码分析(1) - App启动过程
查看>>
wxWidgets源码分析(3) - 消息映射表
查看>>
wxWidgets源码分析(5) - 窗口管理
查看>>
wxWidgets源码分析(7) - 窗口尺寸
查看>>
wxWidgets源码分析(8) - MVC架构
查看>>
wxWidgets源码分析(9) - wxString
查看>>