java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java单例模式

Java创建型设计模式之单例模式

作者:.番茄炒蛋

Java单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点。可以使用多种方式实现单例模式,如饿汉式、懒汉式、双重检查锁定、静态内部类、枚举等,每种方式都有其优缺点,需要根据具体情况选择使用

介绍

单例模式是一种创建型设计模式,其主要特点包括:

优点

缺点

实现

饿汉式

​ 这是一种最简单的单例实现方法.再这种方法中,单例实例再类加载时被创建,因此可以保证在多线程环境下是安全的.

package com.fanqiechaodan.singleton.singleton1;
/**
 * @Classname Singleton
 * @Description
 */
public class Singleton {
    private static final Singleton INSTANCE = new Singleton();
    private Singleton(){
        // 私有构造函数
    }
    public static Singleton getInstance(){
        return INSTANCE;
    }
}

懒汉式

在这种方法中,单例实例在第一次被使用时创建.在多线程环境下,使用双重锁定机制可以确保只有一个实例被创建.

package com.fanqiechaodan.singleton.singleton2;
/**
 * @Classname Singleton
 * @Description
 */
public class Singleton {
    private static volatile Singleton instance;
    private Singleton() {
        // 私有构造函数
    }
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

静态内部类

这种方法利用了Java的类加载机制,在第一次访问SingletonHolder类时才会加载Singleton实例,这种方法既保证了线程安全,又可以实现懒加载

package com.fanqiechaodan.singleton.singleton3;
/**
 * @Classname Singleton
 * @Description
 */
public class Singleton {
    private Singleton(){
        // 私有构造函数
    }
    public static Singleton getInstance(){
        return SingletonHolder.INSTANCE;
    }
    private static class SingletonHolder{
        private static final Singleton INSTANCE = new Singleton();
    }
}

枚举

使用枚举类型可以非常方便的实现线程安全的单例模式.枚举在定义时就被创建了,因此它是线程安全的,并且只有一个实例.

package com.fanqiechaodan.singleton.singleton4;
/**
 * @Classname Singleton
 * @Description
 */
public class Singleton {
    private Singleton() {
        // 私有构造函数
    }
    static enum SingletonEnum {
        /**
         * 枚举实例
         */
        INSTANCE;
        private Singleton singleton;
        /**
         * 私有构造函数,确保只有一个实例
         */
        private SingletonEnum() {
            singleton = new Singleton();
        }
        private Singleton getSingleton() {
            return singleton;
        }
    }
    /**
     * 对外暴露一个获取Singleton对象的静态方法
     *
     * @return
     */
    public static Singleton getInstance() {
        return SingletonEnum.INSTANCE.getSingleton();
    }
}

总体来说,枚举单例模式是一种简单,高效且线程安全的单例实现方式,可以满足大部分单例模式的需求.因此在实际开发中,推荐使用枚举单例模式来实现单例模式.

到此这篇关于Java创建型设计模式之单例模式的文章就介绍到这了,更多相关Java单例模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文