一、单例模式简介
饿汉模式
单例模式 ---> 区别
懒汉模式
设计模式(Design Pattern):
是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
目的:
使用设计模式是为了可重用代码、让代码更容易被他人理解,保证代码可靠性。
单例模式:
有些对象我们只需要一个,比如:
配置文件、工具栏日、线程池、缓存、日志对象等。
如果创造出多个实例,就会导致许多问题,比如占用过多资源,不一致的结果等。
二、单例模式的实现
public class Test {
public static void main(String[] args) {
//饿汉模式
Singleton s1 = Singleton.getInstance();//获取类的实例
Singleton s2 = Singleton.getInstance();
//判断两个实例是否相等
if(s1==s2){
System.out.println("S1和s2是同一个实例");
}else {
System.out.println("S1和s2不是同一个实例");
}
//懒汉模式
Singleton2 s3 = Singleton2.getInstance2();
Singleton2 s4 = Singleton2.getInstance2();
//判断两个实例是否相等
if(s3==s4){
System.out.println("S3和s4是同一个实例");
}else {
System.out.println("S3和s4不是同一个实例");
}
}
}
/**
*
* 单例模式Singleton
* 应用场合:有些对象只需要由一个就足够了例如:古代的皇帝、老婆
* 作用:保证整个应用程序中某个实例有且只有一个
* 类型:饿汉模式、懒汉模式
*
* @author ***
* @version 1.0.0
* @since JDK 1.8
*/
public class Singleton {
//1、将默认的构造方法设置为私有,不允许外部直接创建对象
private Singleton(){
}
//instance 实例
//2、自己在类的内部创建唯一实例,加上static,创建类的成员,可以通过类名的方式访问成员,类加载时,就会创建一个实例
//加上private就无法直接调用
private static Singleton instance=new Singleton();
//3、提供一个用于获取实例的方法
public static Singleton getInstance(){
return instance;
}
}
/**
*
* 懒汉模式
* @author ***
* @version 1.0.0
* @since JDK 1.8
*/
public class Singleton2 {
//1、将默认的构造方法设置为私有,不允许外部直接创建对象
private Singleton2(){
}
//2、创建类的唯一实例,使用private static修饰
private static Singleton2 instance;
//3、提供一个用于获取实例的方法,使用public static修饰
public static Singleton2 getInstance2(){
if(instance==null){
instance=new Singleton2();
}
return instance;
}
}
三、饿汉模式和懒汉模式的区别
* 1、饿汉模式的特点时加载类是比较慢,但是运行时获取对象的速度比较快
* 2、懒汉模式的特点时加载类时比较快,但是运行时获取对象的速度比较慢
* 3、饿汉模式线程安全,懒汉模式线程不安全