定义
单例模式Singleton:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
让类自身负责保存它的唯一实例,这个类可以保证没有其他实例可以被创建,构造函数private,其他类无法创建这个类的实例,这个类提供一个访问它唯一实例的方法。
结构图
代码
//客户端
public class Main {
public static void main(String[] args) {
Singleton s1=Singleton.GetInstance();
Singleton s2=Singleton.GetInstance();
if(s1==s2){
System.out.println("两个对象是相同的实例");
}
}
}
//
class Singleton{
private static Singleton instance;
private Singleton(){};
public static Singleton GetInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
多线程-双重锁定
Double-Check Locking
class Singleton{
private volatile static Singleton instance;
private Singleton(){};
public static Singleton GetInstance() {
if (instance == null) {
synchronized(Singleton.class){
if(instance==null)
instance = new Singleton();
}
}
return instance;
}
}
饿汉单例-静态初始化
饿汉:在自己被加载时就将自己实例化
懒汉:在第一次被引用时,才会将自己实例化。有多线程问题。
饿汉代码
class Singleton{
private static Singleton instance=new Singleton();
private Singleton(){};
public static Singleton GetInstance() {
return instance;
}
}