一、概述
1、定义
Ensure a class has only one instance,and provide a global point of access to it。(确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例)。
2、单例模式的通用类图:
3、单例模式的几种实现
- 饿汉式(静态常量)
- 饿汉式(静态代码块)
- 懒汉式(线程不安全)
- 懒汉式(线程安全,同步方法)
- 双重检查
- 静态内部类
- 枚举
4、单例模式使用举例:
Hibernate的SessionFactory,充当数据存储源的代理,并负责创建Session对象。SessionFactory并不是轻量级的,一般情况下,一个项目通常只需要一个SessionFactory,因此这里使用的就是单例模式。
二、饿汉式
1、创建步骤
创建一个饿汉式(静态常量)单例模式的步骤如下:
- 构造器私有化(防止 new)
- 在类的内部创建对象
- 向外暴露一个静态的公共方法。getInstance()
2、代码实现(静态常量):
public class Singleton {
//本类内部创建对象实例
private static final Singleton instance=new Singleton();
//构造器私有化
private Singleton(){
}
//向外暴露的静态方法
public static Singleton getInstance(){
return instance;
}
}
3、代码实现(静态代码块)
public class Singleton {
private static Singleton instance;
//构造器私有化
private Singleton(){
}
static {
//在静态代码块中创建单例对象
instance