概念
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
步骤:
(1) 私有化该类的构造函数(private)
(2)在本类中创建一个本类对象(private static)或者在方法中创建
(3)定义一个公有方法,将创建的对象返回(public static)。
内存情况
在堆中只有一个对象;方法区保存着构造方法和公有方法等。
懒汉设计模式和饿汉设计模式
(1)懒汉式:延迟加载对象形式,对象在公有方法建立;(存在多线程安全隐患)
(2)饿汉式:只要已加载类就创建对象。(开发用的多)
代码样例
(1)懒汉式(线程不安全)
class SingleDemo1{
private static SingleDemo1 s=null;
private SingleDemo1(){}
private static SingleDemo1 getInstance(){
if(s == null){
s=new SingleDemo1();
}
return s;
}
}
双重检验确保线程安全
public class Singleton{
private static volatile Singleton instance = null;
private Singleton(){}
public Singleton getInstance(){
if(instance == null){
synchronized(Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
(2)饿汉式
public class SingleDemo{
private static SingleDemo s=new SingleDemo();
private SingleDemo(){}
public static singleDemo getInstance(){
return s;
}
}