Java设计模式之单例模式
  5lhpQpHCcLyL 2023年11月15日 17 0

在某些情况下,需要确保一个类只有一个实例,并且需要一个全局访问点来访问这个实例。例如,在一个应用程序中,一个配置管理器类需要保持一致的配置数据,以避免不同部分之间的配置冲突。

单例模式通过需要确保一个类只能创建一个实例,并提供一个静态方法或者静态属性来访问这个实例。通常,单例类会将自己的构造函数声明为私有,以防止外部代码直接创建实例。通过一个静态方法,单例类可以控制在运行时只能获得同一个实例。单例模式有两种实现方法:饿汉式和懒汉式。饿汉式是项目初始化的时候就创建实例,以static修饰方法亦或者用private来修饰创建方法,项目在初始化的时候实例化完成,后面就不再创建,懒汉模式是项目初始化的时候不去实例化,而是在用到的时候再去实例化,在第二次用到的时候判断是否已经存在一个实例,如果已经存在实例就用存在的实例对象。但是此方式不是线程安全的,所以为了线程安全还需要在创建实例的时候加锁,保证只会创建一个实例。

单例模式的应用可以确保在整个应用程序中只有一个实例存在,从而节省了资源和内存。它也可以提供一个全局的访问点,使得代码中的各个部分都可以方便的获取这个实例。然而,过度的使用单例模式可能导致全局状态难以控制,以及模块之间的紧耦合。在多线程环境下要小心处理,以确保线程安全。总之,单例模式是一种常用的设计模式,适用于需要全局唯一实例的场景。它的核心思想在于通过限制类的实例化来控制对象的数量,从而保证全局唯一性。

代码实例

public class Singleton {
    // 私有静态成员变量,用于保存单例实例
    private static Singleton instance;
    
    // 私有构造方法,防止外部实例化
    private Singleton() {
        // 初始化操作
    }
    
    // 公共静态方法,用于获取单例实例
    public static Singleton getInstance() {
        if (instance == null) {
            // 如果实例为空,则创建一个新实例
            instance = new Singleton();
        }
        return instance;
    }
    
    // 其他成员方法
    public void showMessage() {
        System.out.println("Hello, I am a Singleton!");
    }
}
// 这个示例演示了如何创建一个简单的单例模式
// 但请注意,这个实现并不是线程安全的。
// 在多线程环境中,可能会出现多个线程同时访问getInstance()方法,导致创建多个实例的情况。
// 为了实现线程安全的单例模式,可以使用双重检查锁定或其他同步机制。
public class Main {
    public static void main(String[] args) {
        // 获取单例实例
        Singleton singleton = Singleton.getInstance();
        
        // 调用成员方法
        singleton.showMessage();
    }
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
5lhpQpHCcLyL