设计模式(一)单例模式:5-单元素枚举类模式

思想:

  这是 Effective Java 极力推荐的一种,代码为各种实现中最简单的。

1 public enum EnumSingleton {
2
3     INSTANCE;
4
5 }

单元素枚举类模式

  其实现,完全是基于枚举类的特性,可以说天生受到了 JVM 的支持,而且既不用思考反射,也不用考虑多线程,对于自身的循环引用,本质上也是一个对象。

1 @Test
2     public void test() throws Exception {
3         EnumSingleton singleton1 = EnumSingleton.INSTANCE;
4         EnumSingleton singleton2 = EnumSingleton.INSTANCE;
5         @SuppressWarnings("static-access")
6         EnumSingleton singleton3 = EnumSingleton.INSTANCE.INSTANCE;
7         Assert.assertSame(singleton1, singleton2);
8         Assert.assertSame(singleton1, singleton3);
9     }

JUnit

  但是劣势也很明显,而且也是由枚举类带来的:枚举类不支持继承和实现,所以在某些场景下不能使用。

时间: 2024-08-24 00:40:45

设计模式(一)单例模式:5-单元素枚举类模式的相关文章

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

在上一篇文章<单例模式的终结者--setAccessible(true)>中介绍了传统单例模式的不足之处,虽然枚举类实现单例模式还没有被广泛采用,但<effective java>里面已经承认单元素枚举类是实现单例模式最好的方法了. 下面写个小demo示范一下,这是只有一个元素的枚举类,枚举类里面也可以写方法. package go.derek; public enum EnumSingleton { instance; public void doSomething(){ Sys

php设计模式之单例模式(单元素模式)

单例模式: 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例.它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用. (1). 需要一个保存类的唯一实例的静态成员变量:private static $_instance; (2). 构造函数和克隆函数必须声明为私有的,防止外部程序new类从而失去单例模式的意义: private function __construct() { $this->_db = pg_connect('xxxx')

使用单元素枚举实现单例

如果不涉及到线程安全及延迟加载,单例最简单的写法: public class SingletonTest { public static final SingletonTest instance = new SingletonTest(); private SingletonTest(){ } } 考虑到线程安全跟延迟加载,修改如下: public class SingletonTest { public static final SingletonTest getInstance(){ ret

GOF设计模式之单例模式

定义 单例模式(Singleton Pattern)的定义如下:Ensure a class only has one instance, and provide a global point of access to it(确保某一个类只有一个实例,并且提供一个全局访问点来访问此实例).在JVM应用中,单例模式表现为一个类在JVM中只有一个实例.一个相对合理的类图如下: 使用场景 1.系统中需要一个共享的访问点或者共享数据,例如Web请求计数器. 2.创建一个对象需要消耗的资源过多,例如IO.

表单and表单元素

表单 <form action="" method="get/post" ></form> 上传到服务器 表单元素 文本类 <input type="text" value=""> - 普通文本框 <input type="text" password=""> - 密码框 <textarea></textarea>-

枚举类专题(有源代码)

简介:JDK1.5之前需要自定义枚举类,JDK1.5新增的enum关键字用于定义枚举类,若枚举只有一个成员,则可以作为一种单例模式的实现方式 枚举类的属性:枚举类对象的属性不应允许被改动,所以应该使用private final修饰 ·枚举类的使用private final修饰的属性应该在构造器中为其赋值 ·若枚举类显式的定义了带参数的构造器,则在列出枚举值时也必须对应的传入参数 Enum枚举类: ·必须在枚举类的第一行声明枚举类对象. ·枚举类和普通类的区别: 1.使用enum定义的枚举类默认继

为什么用枚举类来实现单例模式越来越流行?

前言 单例模式是 Java 设计模式中最简单的一种,只需要一个类就能实现单例模式,但是,你可不能小看单例模式,虽然从设计上来说它比较简单,但是在实现当中你会遇到非常多的坑,所以,系好安全带,上车. 单例模式的定义 单例模式就是在程序运行中只实例化一次,创建一个全局唯一对象,有点像 Java 的静态变量,但是单例模式要由于静态变量,静态变量在程序启动的时候就要创建,会造成大量的资源浪费,好的单例模式不会有这个问题.开发中的很多工具类都应用了单例模式,线程池.缓存.日志对象等,它们都只需要创建一个对

C++单例模式与单例类模板

1.单例模式 (1)需求的提出:在架构设计时,某些类在整个系统生命周期中最多只能有一个对象存在(Single,Instance) (2)问题:如何定义一个类,使得这个类最多只能创建一个对象? 要控制类的对象数目,必须对外隐藏构造函数 思路: @1:将构造函数的访问属性设置为private,将拷贝构造函数,赋值操作符都声明成private的,防止对象的赋值操作,因为这个类的对象只能有一个. @2:定义instance并初始化为NULL.在类中用static type* instance的方式声明一

抽象类 抽象方法 接口 类部类 匿名类部类 设计模式之单例模式(懒汉模式及饿汉模式)

---恢复内容开始--- 抽象类  关键字  abstract 不能被实例化(创建对象),可通过类名调用静态方法 子类继承抽象类必须重写父类的所有抽象方法,然后用多态调用 接口:关键字 interface   类名 implements 接口名 1.接口中只能有抽象方法,并且不能被实例化,通过多态调用 2.接口与接口之间的关系: 继承关系(可以多继承); 类部类: 在类中定义的类 创建类部类对象    外部类名.内部类名  对象名 = new 外部类名().new内部类名() 匿名类部类: 在写