ToB企服应用市场:ToB评测及商务社交产业平台

标题: 头一次见单例模式讲的如此透彻 [打印本页]

作者: 冬雨财经    时间: 2023-6-23 11:28
标题: 头一次见单例模式讲的如此透彻
简介

单例模式是一种常用的软件设计模式,用于创建类型。通过单例模式的方法创建的类在当前进程中只有一个实例。单例模式的类只能允许一个实例存在。单例模式的作用是保证在整个应用程序的生命周期中,任何一个时刻,单例类的实例都只存在一个。
组成部分:

优缺点

单例模式的优点有:
单例模式的缺点有:
应用场景

单例模式适用于以下场景:
Java 代码示例

在 Java 中,有五种不同的单例实现方法。其中包括饿汉式、懒汉式、双检锁、静态内部类和枚举类。
单例模式的五种实现原理分别是饿汉式、懒汉式、双重检测、静态内部类和枚举类。它们各自的优缺点如下:
  1. public class Singleton {
  2.     private Singleton() {}
  3.     private static Singleton instance;
  4.     public static synchronized Singleton getInstance() {
  5.         if (instance == null) {
  6.             instance = new Singleton();
  7.         }
  8.         return instance;
  9.     }
  10. }
复制代码
  1. public class Singleton {
  2.     private Singleton() {}
  3.     private static final Singleton instance = new Singleton();
  4.     public static Singleton getInstance() {
  5.         return instance;
  6.     }
  7. }
复制代码
  1. public class Singleton {
  2.     private Singleton() {}
  3.     private static volatile Singleton instance;
  4.     public static Singleton getInstance() {
  5.         if (instance == null) {
  6.             synchronized (Singleton.class) {
  7.                 if (instance == null) {
  8.                     instance = new Singleton();
  9.                 }
  10.             }
  11.         }
  12.         return instance;
  13.     }
  14. }
复制代码
  1. public class Singleton {
  2.     private Singleton() {}
  3.     private static class Instance {
  4.         private static final Singleton instance = new Singleton();
  5.     }
  6.     public static Singleton getInstance() {
  7.         return Instance.instance;
  8.     }
  9. }
复制代码
  1. public enum Singleton {
  2.      INSTANCE;
  3. }
复制代码
这些不同的实现方式有不同的适用场景,需要根据具体的需求和条件来选择。在这里,我只能给出一些个人的看法,仅供参考。
个人来说在编码效率和可维护性上我比较倾向于使用静态内部类的实现方式,既能保证线程安全性,又能支持延迟加载。
Spring 代码示例

在 Spring 框架中,Spring 默认使用单例模式来创建和管理 Bean 对象,但是可以通过 @Scope("singleton") 注解来指定 Bean 对象的作用域。
总结

单例模式是一种简单而常用的设计模式,它可以保证一个类只有一个实例,并提供一个全局访问点。单例模式有多种实现方式,各有优缺点。单例模式可以节约系统资源,避免资源冲突,保证对象的唯一性和一致性。但是单例模式也有不利于继承和扩展的缺点,以及可能存在的安全隐患。在使用单例模式时,需要根据具体情况和需求选择合适的方法,并注意避免潜在的问题。
关注公众号【waynblog】每周分享技术干货、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4