1单例模式

保存一份避免资源浪费(池资源)
避免资源冲突(日志)

Java单例类对象的唯一性的作用范围并非进程,而是类加载器(Class Loader)
Java类加载器和类全名确定类唯一性

实现方式

饿汉
懒汉 支持延迟加载(加锁保证线程安全单例)
DCL
静态内部类
枚举方式

应用

  • 数据库池不推荐单例,对于耗时sql单独线程池
  • 文件管理器
  • 配置类
  • spring
    解决循环依赖时使用DCL获取单例对象,但DefaultListableBeanFactory并不是单例对象
    检查选存对象是否存在,不存在DCL检查earlySingletonObjects是否存在

不足

OOP支持不友好,放弃了继承和多态
于扩展不友好
测试性不友好
不支持有参构造函数

替代方案

工厂模式、IOC容器、程序员自己保证不会创建多个对象

多例

多例,一个类创建的多个实例
工厂,多个不同子类的实例