JAVA使用枚举实现单例模式


概述

本文主要介绍使用Enum实现JAVA单例,以及其单例模式的使用。

单例模式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

枚举实现单例

    // 单例
    public enum BeanContext {

        Instance;
        private BeanContext() {
            System.out.println("init");
        }
        public void print() {

            System.out.println("hello");
        }

    //测试
    public static void main(String[] args) {

            BeanContext b1 = BeanContext.Instance;
            b1.print();
            BeanContext b2 = BeanContext.Instance;
            b2.print();
            BeanContext b3 = BeanContext.Instance;
            b3.print();
            BeanContext b4 = BeanContext.Instance;
            b4.print();
        }
    }

结果

init
hello
hello
hello
hello

可以看到用非常简单的方式实现了JAVA单例,结果可以看到其实际只初始化了一次.

Enum 单例模式的应用

    public class InstanceDemo {

        /**
         * 构造方法私有化
         */
        private InstanceDemo(){

        }

        /**
         * 返回实例
         * @return
         */
        public static InstanceDemo getInstance() {
            return Singleton.INSTANCE.getInstance();
        }

        /**
         * 使用枚举方法实现单利模式
         */
        private enum Singleton {//内部枚举类
            INSTANCE;

            private InstanceDemo instance;

            /**
             * JVM保证这个方法绝对只调用一次
             */
            Singleton() {
                instance = new InstanceDemo();
            }

            public InstanceDemo getInstance() {
                return instance;
            }
        }
    }

简说一下常用的单例实现方式

单例模式有很多种实现方式,懒汉式、饿汉式、静态代码块、双重锁(多线程的情况下可以用)、静态内部类(推荐使用),这里只说一下静态内部类的实现方式.

    public class Singleton {
        // 私有构造
        private Singleton() {}

        public static Singleton getInstance() {
            return InnerObject.single;
        }

        // 静态内部类
        private static class InnerObject{
            private static Singleton single = new Singleton();
        }
    }

总结

单例模式的三大要点:线程安全、延迟加载、序列化与反序列化安全。

一盏灯, 一片昏黄; 一简书, 一杯淡茶。 守着那一份淡定, 品读属于自己的寂寞。 保持淡定, 才能欣赏到最美丽的风景! 保持淡定, 人生从此不再寂寞。



   Reprint policy


《JAVA使用枚举实现单例模式》 by jackromer is licensed under a Creative Commons Attribution 4.0 International License
 Previous
JAVA常用数据集合分析 JAVA常用数据集合分析
概述 主要介绍和对比JAVA常用的数据集合 常用数据集合 List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类 Map结构的集合类:HashMap类,Hashtable类 Set结构的
2019-08-27
Next 
十大排序算法 十大排序算法
概述 本文主要介绍常用的排序算法,常用到的排序算法有十中左右,但是在稳定性和时间空间复杂度上存在差异,有时候可以结合使用以达到最高的性能。 算法分类 常用的排序算法有如下几种 性能对比 稳定:如果a原本在b前面,而a=b,排
2019-08-27
  目录