使用枚举实现单例模式

原创 2017年08月10日 11:32:20

前言

单例模式的实现方式有多种,从最基础的非LazyLoad的懒汉式,到LazyLoad但需要双重检查的饿汉式,再到比较简单实现LazyLoad的静态内部类方式,均可实现单例模式。(忘了的可以查查资料:D)不过使用枚举实现单例模式,可称之为实现单例模式最简单的方法。

实现

public enum MySingleton {
    INSTANCE;   

    // all the methods you want
    private String hello() {
        System.out.println("Hello, world!");
    }
}

需要使用单例时,直接MySingleton.INSTANCE即可得到枚举对象。调用对象的方法,如MySingleton.INSTANCE.hello(),以实现需要的功能。

说明

为什么枚举类能这么简单实现单例?回顾一下单例的两个经典模式所需的条件:

  • 懒汉式:private构造函数,提前new,需要时直接return;
  • 饿汉式:private构造函数,需要时再new,导致了double check;

再看枚举,符合构造函数为private,且在首次调用的时候使用构造函数构造枚举对象。因此枚举完全可以胜任单例的工作,而且是LazyLoad,并且不需要双重检查。

https://stackoverflow.com/questions/26285520/implementing-singleton-with-an-enum-in-java

Q:
I have read that it is possible to implement Singleton in Java using an Enum such as:

public enum MySingleton {
INSTANCE;
}
But, how does the above work? Specifically, an Object has to be instantiated. Here, how is MySingleton being instantiated? Who is doing new MySingleton()?

A:
This,

public enum MySingleton {
INSTANCE;
}
has an implicit empty constructor. Let’s be explicit instead,

public enum MySingleton {
INSTANCE;
private MySingleton() {
System.out.println(“Here”);
}
}
If you then added another class with a main() method like

public static void main(String[] args) {
System.out.println(MySingleton.INSTANCE);
}
You would see

Here
INSTANCE
enum fields are compile time constants, but they are instances of their enum type. And, they’re constructed when the enum type is referenced for the first time.

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Java 利用枚举实现单例模式

引言单例模式比较常见的实现方法有懒汉模式,DCL模式公有静态成员等,从Java 1.5版本起,单元素枚举实现单例模式成为最佳的方法。Java枚举基本用法枚举的用法比较多,本文主要旨在介绍利用枚举实现单...

Java 利用枚举实现单例模式

引言单例模式比较常见的实现方法有懒汉模式,DCL模式公有静态成员等,从Java 1.5版本起,单元素枚举实现单例模式成为最佳的方法。Java枚举基本用法枚举的用法比较多,本文主要旨在介绍利用枚举实现单...

Java枚举实现单例模式

单例模式约束一个类只能实例化一个对象。在Java中,为了强制只实例化一个对象,最好的方法是使用一个枚举量。这个优秀的思想直接源于JoshuaBloch的《EffectiveJava》(《Java高效编...

单例模式(Singleton pattern)的三种写法(含枚举实现方式)

最近项目组开始找人,试卷上豁然是个经典的问题(话说我毕业那会儿都已经是老题目,如今还在用)那就是, 哥们儿,写个单例模式吧! 恰巧今天早上看《effective java》看到单例模式的一种新写法。就...

黑马程序员-通过枚举实现单例模式

import java.lang.reflect.Constructor; /** * 测试Singleton的可靠性。 * * @author 老紫竹(laozizhu.com) */ p...

java中用枚举类实现单例模式

枚举单例(Enum Singleton)是实现单例模式的一种新方式,尽管单例模式在java中已经存在很长时间了,但是枚举单例相对来说是一种比较新的概念,枚举这个特性是在Java5才出现的,这篇文章主要...

Java实现单例模式之饿汉式、懒汉式、枚举式,带测试。

Java实现单例的3种普遍的模式,恶汉式、懒汉式、枚举式。

单例模式的八种写法比较、枚举实现的好处、静态内部类实现单例原理

目录简介 基本的实现思路 注意事项 单例模式的八种写法 1、饿汉式(静态常量)[可用] 2、饿汉式(静态代码块)[可用] 3、懒汉式(线程不安全)[不可用] 4、懒汉式(线程安全,同步方法)[不推荐用...

单例模式的八种写法比较、枚举实现的好处、静态内部类实现单例原理

目录 简介 基本的实现思路 注意事项 单例模式的八种写法 1、饿汉式(静态常量)[可用] 2、饿汉式(静态代码块)[可用] 3、懒汉式(线程不安全)[不可用] 4、懒汉式(线程安全,同步方法...

Java枚举使用以及枚举实现单例模式

JDK 1.5 之前需要自定义枚举类 JDK 1.5 新增的enum关键字用于定义枚举类 若枚举只有一个成员,则可以作为一种单例模式的实现方式。 枚举类型是指由一组固定的常量组成合法值的类型,枚...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)