单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
Singleton类:
public class Singleton {
private static Singleton singleton;
//禁止外界利用new创建实例
private Singleton (){}
//本类唯一访问点
public static Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
客户端代码:
public static void main (String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
if (s1 == s2) {
System.out.println("两个对象是同个实例");
}
}
多线程时的单例(双重锁定)
Singleton类:
public class Singleton {
private static Singleton singleton;
//禁止外界利用new创建实例
private Singleton (){}
//本类唯一访问点
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class){
if (singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
}
====================================================================================
饿汉模式:在类被加载时就实例化。(占用空间资源)
懒汉模式:在第一次被引用时才实例化。(容易引发线程安全问题)
懒汉模式:以上就是懒汉模式,每次实例化时判断对象是否存在。
饿汉模式:即不判断对象是否存在。
public class Singleton {
private static Singleton singleton;
//禁止外界利用new创建实例
private Singleton (){}
//本类唯一访问点
public static Singleton getInstance() {
singleton = new Singleton();
return singleton;
}
}