枚举单例模式

单例模式作为最常见的设计模式之一,一直是面试中的热点问题,常用的饿汉式懒汉式等单例写法总会有各种各样的不足,特别涉及到反射与序列化问题时,这些常用的单例写法都得做特殊处理才能保证对象实例唯一性,具体原因请自行百度。

每个介绍单例写法的文章总会提到枚举单例模式,但由于枚举引入较晚,熟悉的人不多,总会让人感觉无法理解其好处与优势,其实枚举单例乃是最完美的单例模式写法,没有之一,所有上面所提到的其它写法的不足之处在枚举单例写法中都被完美解决,下面介绍几种枚举单例写法并介绍其原理。

接口实现形式

对于一个标准的enum单例模式,最优秀的写法还是实现接口的形式:

// 定义单例模式中需要完成的代码逻辑
public interface MySingleton {
    void doSomething();
}

public enum Singleton implements MySingleton {
    INSTANCE {
        @Override
        public void doSomething() {
            System.out.println("complete singleton");
        }
    };

    public static MySingleton getInstance() {
        return Singleton.INSTANCE;
    }
}

内部枚举类形式

1.构造方法中实例化对象
public class EnumSingleton {
    private EnumSingleton(){}
    public static EnumSingleton getInstance(){
        return Singleton.INSTANCE.getInstance();
    }

    private enum Singleton{
        INSTANCE;
        private EnumSingleton singleton;
        //JVM会保证此方法绝对只调用一次
        Singleton(){
            singleton = new EnumSingleton();
        }
        public EnumSingleton getInstance(){
            return singleton;
        }
    }
}
2.枚举常量的值即为对象实例
public class EnumSingleton {
    private EnumSingleton(){}
    public static EnumSingleton getInstance(){
        return Singleton.INSTANCE.getInstance();
    }

    private enum Singleton{
        INSTANCE(new EnumSingleton());
        private EnumSingleton singleton;
        //JVM会保证此方法绝对只调用一次
        Singleton(EnumSingleton singleton){
            this.singleton = singleton;
        }
        public EnumSingleton getInstance(){
            return singleton;
        }
    }
}

总结,JVM会保证枚举类构造方法绝对只调用一次,所以保证了对象实例的唯一性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • statement:本篇内容只是建立在我目前经验的基础之上,必然有不完善甚至是不正确的地方,请谨慎阅读,如果能指出...
    睦月MTK阅读 1,792评论 0 2
  • 需要单例的对象: public class User { /** * 名字 */ private String...
    五毛_0b89阅读 748评论 0 0
  • 枚举单例模式简单实践,用枚举构建一个百度API的client唯一实例。 测试类 结果为 在程序运行过程中获取的是唯...
    写代码的杰西阅读 2,600评论 0 2
  • 前言 本文主要参考 那些年,我们一起写过的“单例模式”。 何为单例模式? 顾名思义,单例模式就是保证一个类仅有一个...
    tandeneck阅读 7,251评论 1 8
  • 单例模式(SingletonPattern)一般被认为是最简单、最易理解的设计模式,也因为它的简洁易懂,是项目中最...
    成热了阅读 9,874评论 4 34

友情链接更多精彩内容