只有一个单例类,没有其他的层次结构和抽象。该模式确保该类只生成一个对象。
关键点:
1.构造函数私有化,一般为private,不能通过new的形式手动构造单例类对象。
2.通过一个公有静态方法返回单例类对象。
3.确保单例类的对象有且只有一个,尤其是在多线程环境下。
4.确保单例类对象在反序列化时不会重新构建对象。
(1)饿汉单例模式
在声明静态对象时初始化对象。
(2)懒汉单例模式
在第一次使用时进行初始化对象。
初始方法使用synchronized修饰。
(3)Double checklock单例模式
示例:
public class Singleton{
private static Singleton mIntance=null;
private Singleton(){}
public static Singleton getInstance(){
if(mIntance==null){
synchronized(Singleton.class){
if(mIntance==null){
mIntance=new Singleton();
}
}
}
}
}
jdk1.5之后使用volatile完成单例对象声明。
private volatile static Singleton mInstance=null;//来声明单例对象
(4)静态内部类单例模式
(5)枚举单例
(6)使用容器实现单例模式