单例设计模式:保证类在内存中只有一个对象
/*
*
* 单例设计模式:保证类在内存中只有一个对象
*/
public static void main(String[] args) {
// Singleton s1= new Singleton(); //3.由于私有构造方法,类外无法直接new 对象
/*Singleton s1= Singleton.s;
Singleton s2= Singleton.s;
System.out.println(s1==s2);*/
//上述两行会导致能够修改s的值所以得私有成员变量
//5.重新通过get方法获得成员变量
Singleton s1= Singleton.getInstance();
Singleton s2= Singleton.getInstance();
System.out.println(s1==s2);
}
}
/*
* 饿汉式
*/
class Singleton{
//1.私有构造方法,类外无法直接new 对象,其他类无法访问该方法
private Singleton() {
}
//2.创建本类对象
// public static Singleton s =new Singleton();//会导致能够修改s的值所以得私有成员变量
private static Singleton s =new Singleton();
//4.对外提供公共的访问方法get方法
public static Singleton getInstance() {
return s;
}
}
/*
* 懒汉式:单利模式的延迟加载模式
* 会有安全隐患
*/
class Singleton2 {
//1.创建本类对象,但不实例化
private static Singleton2 s;
//2.私有化构造方法
private Singleton2 () {
}
//3.对外提供公共的访问方法
public static Singleton2 getInstance() {
if(s==null) {
//多线程情况下,当线程1进入if后等待,cpu使用权被线程2抢去了也进入了if判断语句那么最终会造成多个对象被创建出来
//所以懒汉式一般不使用
s=new Singleton2();
}
return s;
}
}
class Singleton3 {
//1.创建本类对象,但不实例化
public static final Singleton3 s= new Singleton3();
//2.私有化构造方法
private Singleton3 () {
}
//3.对外提供公共的访问方法
public static Singleton3 getInstance() {
return s;
}
}
原文:https://www.cnblogs.com/sxgp2013/p/10360229.html