前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >23种设计模式,单例模式的实战

23种设计模式,单例模式的实战

原创
作者头像
小马哥学JAVA
发布2024-04-06 12:47:08
1560
发布2024-04-06 12:47:08

在软件工程中,设计模式是为常见问题提出的典型解决方案。总共有23种设计模式,这些模式被分为三大类:创建型、结构型和行为型。单例模式是其中的一种创建型模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。

单例模式的概念

单例模式通过私有化其构造函数来确保类的实例只能被创建一次。如果实例已经存在,则直接返回现有的实例,否则创建一个新的实例。这确保了在整个应用程序中,该类只有一个实例存在。

单例模式的优点

  1. 资源控制:单例模式可以精确控制资源和对象的使用,如配置信息管理、线程池、缓存等。
  2. 全局访问点:提供了一个全局访问点,全局性的控制资源访问。
  3. 节省资源:由于实例限制为一个,避免了对资源的重复浪费。

单例模式的缺点

  1. 全局状态:全局的单个实例可能引起资源的全局访问冲突,特别是在多线程环境下。
  2. 可扩展性差:难以继承单例类,因为构造函数是私有的。
  3. 测试困难:单例模式的全局状态使得单元测试变得困难,因为测试代码可能需要访问和修改私有构造函数。

Java代码示例

下面是一个Java中实现单例模式的基本示例,使用了所谓的“懒汉式”加载方法,这种方法第一次调用getInstance()方法时才创建实例:

java复制代码

代码语言:javascript
复制
public class Singleton {
    // 私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载
    private static Singleton instance = null;
    
    // 私有构造方法,防止被实例化
    private Singleton() {
    }
    
    // 静态工程方法,创建实例
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
    
    // 如果该对象被用于序列化,可以保证对象在序列化前后保持一致
    public Object readResolve() {
        return instance;
    }
}

这个例子中使用了懒汉式的单例实现,它是线程安全的,因为getInstance()方法是同步的。但是,每次调用getInstance()方法都会进行线程锁定检查,这可能会影响性能。在高性能需求下,可以考虑使用其他单例实现方式,如双重检查锁定或静态内部类等方法,以减少性能开销。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 单例模式的概念
  • 单例模式的优点
  • 单例模式的缺点
  • Java代码示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档