[toc]
Java设计模式之单例设计模式(懒汉、饿汉)
相信面试过的初中级Java开发的朋友可能都有遇到过单例设计模式的笔试题吧,如果之前没有背下来或者不理解,可以看看下面这篇文章,应该足够应付笔试了?或许不够吧,权当学习了解一下吧。
单例模式的含义: 单例模式,是一种常用的软件设计模式。通过单例模式可以保证系统中, 应用该模式的这个类永远只有一个实例。即一个类永远只有一个对象实例。
单例的应用场景:在实际开发中,有很多业务对象永远只需要一个,无论启动多少次 我们只需要一个对象,例如任务管理对象,只需要一个对象。节约内存和性能。
饿汉单例设计模式
屁话上说,直接上代码吧。
package singleinstance;
import org.junit.Test;
/**
* ClassName: SingleInstanceHungry
* Description: 饿汉单例设计模式
* 在用类获取对象的时候,类已经提前创建好了
* 步骤:①定义一个类,构造器私有
* ②定义一个静态变量储存一个对象
* //③提供一个返回单例对象的方法
* Author: hhj
* Date: 19:58 2019/11/24
* Version: 1.0
*/
public class SingleInstanceHungry {
@Test
public void test01(){
SingleInstance01 s1 = SingleInstance01.INS;
SingleInstance01 s2 = SingleInstance01.INS;
System.out.println(s1); // singleinstance.SingleInstance01@4ee285c6
System.out.println(s2); // singleinstance.SingleInstance01@4ee285c6
System.out.println(s1 == s2); // true
}
@Test
public void test02(){
SingleInstance02 t1 = SingleInstance02.getInstance();
SingleInstance02 t2 = SingleInstance02.getInstance();
System.out.println(t1); // singleinstance.SingleInstance02@4ee285c6
System.out.println(t2); // singleinstance.SingleInstance02@4ee285c6
System.out.println(t1 == t2); //true
}
}
/**
* Description: 写法一
* @author: hhj
* @date: 20:07 2019/11/24
* @param:
* @return:
*/
class SingleInstance01{
public static final SingleInstance01 INS = new SingleInstance01();
private SingleInstance01(){}
}
/**
* Description: 写法二
* @author: hhj
* @date: 20:07 2019/11/24
* @param:
* @return:
*/
class SingleInstance02{
public static final SingleInstance02 INS = new SingleInstance02();
private SingleInstance02(){}
public static SingleInstance02 getInstance(){
return INS;
}
}
懒汉单例设计模式
package singleinstance;
import org.junit.Test;
/**
* ClassName: SingleInstanceLazy
* Description: 懒汉单例设计模式
* 在用类获取对象的时候,才会真正去创建一个对象,而不是提前创建好对象
* 步骤:①定义一个类,把构造器私有
* ②定义一个静态变量储存一个对象
* ③提供一个返回单例对象的方法:在这个方法里面判断是否存在对象了,
* 如果没有才创建,如果存在了就直接返回。这样保证了对象之创建一个对象
* Author: hhj
* Date: 19:59 2019/11/24
* Version: 1.0
*/
public class SingleInstanceLazy {
@Test
public void test(){
SingleInstance s1 = SingleInstance.getInstance();
SingleInstance s2 = SingleInstance.getInstance();
System.out.println(s1); // singleinstance.SingleInstance@4ee285c6
System.out.println(s2); // singleinstance.SingleInstance@4ee285c6
System.out.println(s1==s2); // true
}
}
/**
* Description: TODO
*
* @author: 饿汉单例设计模式
* @date: 20:22 2019/11/24
* @param:
* @return:
*/
class SingleInstance {
private static SingleInstance ins;
private SingleInstance(){}
public static SingleInstance getInstance() {
if (ins == null) {
ins = new SingleInstance();
}
return ins;
}
}
可能写的不是很深入,这里只是做一个简单介绍。 因为大学刚毕业的时候确实遇到过两次让我手写单例的情况。下次再遇到相信大家都能写出来的啦!