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

设计模式-单例模式(一)

原创
作者头像
堕落飞鸟
发布2023-05-03 15:19:33
1030
发布2023-05-03 15:19:33
举报
文章被收录于专栏:飞鸟的专栏飞鸟的专栏

单例模式是一种创建型设计模式,它能够保证一个类仅有一个实例,并提供一个全局访问点。单例模式可以在需要控制资源的情况下,如线程池、数据库连接池等,确保系统中只有一个实例存在,避免了资源浪费和多个实例之间的冲突。

单例模式有多种实现方式,其中最常用的方式是饿汉式和懒汉式。在饿汉式中,单例对象在类加载时就被创建,因此具有线程安全性,但可能会浪费一定的系统资源。在懒汉式中,单例对象在第一次被访问时才被创建,因此具有较好的懒加载效果,但需要注意线程安全性问题。

下面我们通过一个示例代码来演示单例模式的实现。

饿汉式实现

在饿汉式中,单例对象在类加载时就被创建,因此具有线程安全性。我们可以通过在类中定义一个静态的、final 的私有成员变量来实现单例模式。

代码语言:javascript
复制
public class Singleton {
    // 定义一个私有的、静态的、final 的单例对象
    private static final Singleton instance = new Singleton();
    
    // 将构造方法私有化,防止外部创建对象
    private Singleton() {}
    
    // 提供一个全局访问点
    public static Singleton getInstance() {
        return instance;
    }
}

在这个示例中,我们将构造方法私有化,防止外部创建对象。通过定义一个静态的、final 的私有成员变量,实现了单例模式,并通过提供一个全局访问点 getInstance() 方法来获取单例对象。

懒汉式实现

在懒汉式中,单例对象在第一次被访问时才被创建。需要注意的是,在多线程环境下,可能会存在线程安全问题。因此,在实现懒汉式单例模式时,需要考虑线程安全性问题。

以下是懒汉式单例模式的一种线程安全的实现方式。

代码语言:javascript
复制
public class Singleton {
    // 定义一个私有的单例对象
    private static Singleton instance;
    
    // 将构造方法私有化,防止外部创建对象
    private Singleton() {}
    
    // 提供一个全局访问点,使用 synchronized 关键字实现线程安全
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

在这个示例中,我们将构造方法私有化,防止外部创建对象。通过定义一个静态的、私有成员变量 instance,在第一次访问时判断对象是否为 null,如果是则创建新的对象,否则返回现有的对象。为了保证线程安全性,在 getInstance() 方法上加上 synchronized 关键字,保证在多线程环境下只有一个线程能够访问该方法。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 饿汉式实现
  • 懒汉式实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com