java架构师培训-单列模式的介绍和应用场景

单例模式是Java中最简单的设计模式之一,它提供了创建对象的最佳方法。此模式涉及一个类,该类负责创建自己的对象,同时确保仅创建一个对象。此类提供了一种访问其唯一对象的方法,该方法可以直接访问而无需实例化此类的对象。

单例模式虽然很简单,但它的花样一点都不少,我们一一来看。

1、饿汉式

饿汉式,顾名思义,就是我很饿,迫不及待。不管有没有人用,我先创建了再说。

比如在Dubbo中的这段代码,创建一个配置管理器。

java架构师培训

又或者在RocketMQ中,创建一个MQ客户端实例的时候。
java架构师培训

2、懒汉式

懒汉式是对应饿汉式而言的。它旨在第一次调用才初始化,避免内存浪费。但为了线程安全和性能,一般都会使用双重检查锁的方式来创建。

我们来看Seata框架中,通过这种方式来创建一个配置类。
java架构师培训

3、静态内部类

可以看到,通过双重检查锁的方式来创建单例对象,还是比较复杂的。又是加锁,又是判断两次,还需要加volatile修饰的。
java架构师培训

使用静态内部类可以实现双重检查锁定的相同效果,但是实现起来更简单。

在Seata框架中,当创建RM事件处理程序时,将使用静态内部类来创建单例对象。还有一种通过枚举创建单例对象的方法,但是这种方法尚未得到广泛采用,至少作者在通用的开放源代码框架中没有看到它,因此我将不再列出。

有人说,饥饿的人式单身人士模型不好,它无法完成延迟加载和浪费内存。但是作者认为这似乎太挑剔了。实际上,在许多开源框架中,这种方法是最常用的。

如果明确希望实现懒加载效果时,可以考虑用静态内部类的方式;如果还有其他特殊的需求,比如创建对象的过程比较繁琐,可以用双重检查锁的方式。

推荐阅读:java架构师学习路线:分布式架构为什么需要数据中心
如果你想了解更多关于java架构师的专业知识,可以加入JAVA架构师交流群:1037935907,里面都是同行,有资源分享包括但不限于(分布式架构、高可扩展、高性能、高并 发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。欢迎一到五年的工程师加入,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

猜你喜欢

转载自blog.csdn.net/weixin_49698883/article/details/113338932