关于java设计模式单例模式的一些思考
单例模式 通俗易见的解读 设置某个类只存在一个实例
当是看着项目里关于单例可能运用的场景
1 |
|
这里思索一下 线程虽然不安全 但这类都是通过配置文件赋值不带set方法 属性都是固定好值的 不同于单例模式经典的懒汉或饿汉,这是直接主动去创建实例的。
在看看单例模式的老几样
懒汉模式 在使用实例时再创建类实例
1 |
|
须加锁 synchronized 才能保证单例,但加锁会影响效率。
饿汉模式 饿p一个 直接特么加载类就创建实例
1 |
|
缺点明显重复内存 易产生垃圾对象。
这里还有
双检索/双重校验锁 dcl
登记式/静态内部类
不细去看了 详情 https://www.runoob.com/design-pattern/singleton-pattern.html
Effective Java 作者 Josh Bloch 提倡的方式 枚举
1 |
|
有意思的时这玩意是根据序列化机制,绝对防止多次实例化。
说了单例模式的实现我不禁思考,我何时去使用?
Windows任务管理器我是知道的,永远只能存在一个,不信可以试试,也算是典型的单例模式实现了。
那在java开发中何时去使用?
根据唯一实例这一主要特性 我第一想到的就是那些存储全局变量的类,以及工具类和语言类
翻阅大量的资料 基本是应用于以下场景
有状态的工具类对象;
频繁访问数据库或文件的对象;
可得到改进方向 对于读取配置文件赋值的全局使用的类;
对于涉及io操作的工具类;
对于初始化数据连接池的类;
还有一点 非常有意思线程池就是用单例进行设计的。
关于单例模式 现在先这样。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!