理解设计模式(单例)

  单例模式,确保类实例的唯一性。

  • 特定环境:系统要求某类实例唯一,如系统计时工具仅有一个
  • 一类问题:业务需要某些管理角色唯一,以避免混乱
  • 解决方案:单例模式

单例模式要点

  • 前提:某类只有一个实例
  • 行为:自行创建该实例
  • 功能:对整个系统提供该实例

要点实现

  • 该类只提供私有构造函数
  • 该类含其静态私有对象
  • 该类含静态公共方法,以获取唯一实例

应用场景

部分资源管理器,打印任务管理,系统日志管理,网站当前人数统计,异常统一管理,Struts过滤器和监听器,数据库ID生成,等等

优点

  • 主要用于满足业务需求(目的所在
  • 控制实例的单一,且灵活更改实例化过程
  • 另外,单例模式可节约内存。但这不过是顺带作用罢了,其目的不在于此

缺点

  • 每次需检测实例的唯一性,有额外开销
  • 对象生命周期不明确

实现思路

详见“关于单例模式2”

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内部,提高了执行的效率
不必每次获取对象时都进行同步
只有第一次才同步,创建了以后就没必要了

参考

单例模式的7种写法

原文地址:https://www.cnblogs.com/CoolSoul/p/4984857.html