设计模式中最基础的设计模式之一单例模式的三种单例模式的实现方式
一、饿汉式
饿汉-单例模式
public class Single {
//定义私有静态变量
//直接创建好对象,不论到底会用到用不到,故称为饿汉式
private static Single instance = new Single();
//2.定义私有构造函数
private Single(){
}
//3.定义公共静态方法,返回私有静态变量
public static Single getInstance(){
return instance;
}
}
二、懒汉式
懒汉-单例模式
public class Single2 {
//1.定义私有静态变量,类型为类类型,
// 先不创建,等用到时再创建(正是由于等用到时才创建,故而才称为懒汉式)
private static Single2 instance = null;
//2.定义私有构造函数
private Single2(){
}
//3.定义公共静态方法,返回私有静态变量
// public static Single2 getInstance(){//线程不安全的
public static synchronized Single2 getInstance(){// 线程安全,通过synchronize保证线程安全
if(instance == null){
instance = new Single2();
}
return instance;
}
}
三、静态内部类
/**
- 内部类创建方式-单例模式
- 这种方式是线程安全的
*/
public class Single3 {
//1.定义静态内部类,类里面有静态内部属性,为类类型
private static class SingleInnerClass{
private static final Single3 instance = new Single3();
}
//2.定义私有构造函数
private Single3(){
}
//3.定义公共静态方法,返回内部类的静态常量
public static Single3 getInstance(){
return SingleInnerClass.instance;
}
}
总结:三种方式的区别:
饿汉式:效率高,线程安全,但浪费内存;不管对象是否真的用到,都直接创建完成;
懒汉式:效率低,线程不安全,需要通过synchronize来保证线程安全;
内部类式:效率高,线程安全;