- 特定环境:系统要求某类实例唯一,如系统计时工具仅有一个
- 一类问题:业务需要某些管理角色唯一,以避免混乱
- 解决方案:单例模式
- 前提:某类只有一个实例
- 行为:自行创建该实例
- 功能:对整个系统提供该实例
要点实现
- 该类只提供私有构造函数
- 该类含其静态私有对象
- 该类含静态公共方法,以获取唯一实例
部分资源管理器,打印任务管理,系统日志管理,网站当前人数统计,异常统一管理,Struts过滤器和监听器,数据库ID生成,等等
- 主要用于满足业务需求(目的所在)
- 控制实例的单一,且灵活更改实例化过程
- 另外,单例模式可节约内存。但这不过是顺带作用罢了,其目的不在于此
- 每次需检测实例的唯一性,有额外开销
- 对象生命周期不明确
1、当需要时,静态实例化(懒汉式)
2、先实例化,需要时则直接提供(饿汉式)
3、静态内部类
4、枚举类
5、双重锁机制,用于并发环境
public class Singleton {
private static Singleton instance = null;
private Singleton() {
//dosomething
}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (null == instance) {
instance = newSingleton();
}
}
}
return instance;
}
}
这个模式将同步内容下方到if内部,提高了执行的效率
不必每次获取对象时都进行同步
只有第一次才同步,创建了以后就没必要了
原文:http://www.cnblogs.com/CoolSoul/p/4984857.html