使用枚举实现单例模式

原创 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中用枚举类实现单例模式

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

单元素枚举类实现单例模式

本文转载自:点击打开链接 Inspired by Effective Java. Singleton模式是在编程实践中应用最广泛的几种设计模式之一。以前知道的,实现单例的方法有两种(下...

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

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

Java 利用枚举实现单例模式

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

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

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

Java枚举实现单例模式

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

Java 利用枚举实现单例模式

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

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

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

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

http://blog.csdn.net/qq_29542611/article/details/52905516

java中枚举实现单例模式

枚举单例是java中使用枚举提供一个实例对象来实现单例模式的一种新方法,虽然单例模式在java中早已存在,但枚举单例实际上从java5引入枚举作为它的关键特性之后相对来说还是一个新的概念,这篇文章和我...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用枚举实现单例模式
举报原因:
原因补充:

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