public class Singleton {
/*
*
* 懒汉式单例:只有在第一次请求实例的时候创建,并且只在第一次创建后,以后不再创建该类的实例
*/
// 1.一个私有的指向自己的静态变量
private static Singleton instance;
// 2.私有的构造方法,保证不能从外部创建对象
private Singleton(){}
// 3.公开的静态工厂方法,返回该类的唯一实例(当发现没有实例没有初始化的时候才初始化)
public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
System.out.println("创建Singleton类的实例");
}else {
System.out.println("实例已经创建,不能再创建");
}
return instance;
}
}
// 测试类
class Test{
public static void main(String[] args) {
Singleton s = Singleton.getInstance();
System.out.println(Singleton.getInstance());
System.out.println(Singleton.getInstance());
System.out.println(Singleton.getInstance());
}
}
饿汉式:
Java代码
public class Singleton2 {
/*
* 恶汉单例模式:在类加载的时候就创建一个单例模式.
*/
// 1.私有的构造函数,确保不能在类的外部访问该类的构造函数
private Singleton2(){
System.out.println("构造函数执行了");
}
// 2.私有的唯一的静态实例变量,在类加载的时候就创建好单例对象
private final static Singleton2 instance = new Singleton2();
// 3.公开的静态工厂返回此类的唯一实例
public static Singleton2 getInstance(){
return instance;
}
}
// 测试类
class Test2{
public static void main(String[] args) {
Singleton2 s = Singleton2.getInstance();
System.out.println(s);
Singleton2 s2 = Singleton2.getInstance();
System.out.println(s2);
System.out.println(Singleton2.getInstance());
System.out.println(Singleton2.getInstance());
}
}
其主要区别就是创建的时机不同 |