1单例模式
保存一份避免资源浪费(池资源)
避免资源冲突(日志)
Java单例类对象的唯一性的作用范围并非进程,而是类加载器(Class Loader)
Java类加载器和类全名确定类唯一性
实现方式
饿汉
懒汉 支持延迟加载(加锁保证线程安全单例)
DCL
静态内部类
枚举方式
应用
- 数据库池不推荐单例,对于耗时sql单独线程池
- 文件管理器
- 配置类
- spring
解决循环依赖时使用DCL获取单例对象,但DefaultListableBeanFactory并不是单例对象
检查选存对象是否存在,不存在DCL检查earlySingletonObjects是否存在
不足
OOP支持不友好,放弃了继承和多态
于扩展不友好
测试性不友好
不支持有参构造函数
替代方案
工厂模式、IOC容器、程序员自己保证不会创建多个对象
多例
多例,一个类创建的多个实例
工厂,多个不同子类的实例