单例模式分为饿汉模式和懒汉模式。
1.饿汉模式:
/**
* @author suwan
* 单例模式中的饿汉模式
* @date 2019/12/11
*/
public class Singleton {
//将构造方法私有化,不允许外部直接创建对象
private Singleton() {
}
//创建类的唯一实例,使用private static变成私有静态成员变量。(用static修饰外部调用时直接使用类名调用)
private static Singleton singleton=new Singleton();
//提供一个获取实例的方法,使用public static修饰
public static Singleton getSingleton(){
return singleton;
}
}
/**
* @author suwan
* @date 2019/12/11
*/
public class SingletonTest {
public static void main(String[] args){
Singleton singleton1= Singleton.getSingleton();
Singleton singleton2= Singleton.getSingleton();
if (singleton1==singleton2){
System.out.println("singleton1和singleton2是同一实例");
}else {
System.out.println("singleton1和singleton2不是同一实例");
}
}
}
输出: singleton1和singleton2是同一实例
2.懒汉模式:
/**
* @author suwan
* 单例模式中的懒汉模式
* @date 2019/12/11
*/
public class Singleton2 {
//将构造方法私有化,不允许外部直接创建对象
private Singleton2() {
}
//声明类的唯一实例,使用private static。
private static Singleton2 singleton2;
//提供一个获取实例的方法,使用public static修饰
public static Singleton2 getSingleton2(){
if (singleton2==null){
singleton2=new Singleton2();
}
return singleton2;
}
}
/**
* @author suwan
* @date 2019/12/11
*/
public class Singleton2Test {
public static void main(String[] args){
Singleton2 singleton1= Singleton2.getSingleton();
Singleton2 singleton2= Singleton2.getSingleton();
if (singleton1==singleton2){
System.out.println("singleton1和singleton2是同一实例");
}else {
System.out.println("singleton1和singleton2不是同一实例");
}
}
}
输出: singleton1和singleton2是同一实例
总结:懒汉模式只声明,到用到的时候就会new。饿汉模式的singleton
来源:https://www.cnblogs.com/suwan1125/p/12022735.html