E.编写一个包含单个元素的枚举类型[极推荐]。
代码如下:
public enum MaYun {
himself; //定义一个枚举的元素,就代表MaYun的一个实例
private String anotherField;
MaYun() {
//MaYun诞生要做的事情
//这个方法也可以去掉。将构造时候需要做的事情放在instance赋值的时候:
/** himself = MaYun() {
* //MaYun诞生要做的事情
* }
**/
}
public void splitAlipay() {
System.out.println(“Alipay是我的啦!看你丫Yahoo绿眉绿眼的望着。。。”);
}
}
Call:MaYun.himself.splitAlipay();
Feature:从Java1.5开始支持;无偿提供序列化机制,绝对防止多次实例化,即使在面对复杂的序列化或者反射攻击的时候。
总之,五类:懒汉,恶汉,双重校验锁,静态内部类,枚举。
恶汉:因为加载类的时候就创建实例,所以线程安全(多个ClassLoader存在时例外)。缺点是不能延时加载。
懒汉:需要加锁才能实现多线程同步,但是效率会降低。优点是延时加载。
双重校验锁:麻烦,在当前Java内存模型中不一定都管用,某些平台和编译器甚至是错误的,因为instance = new MaYun()这种代码在不同编译器上的行为和实现方式不可预知。
静态内部类:延迟加载,减少内存开销。因为用到的时候才加载,避免了静态field在单例类加载时即进入到堆内存的permanent代而永远得不到回收的缺点(大多数垃圾回收算法是这样)。
枚举:很好,不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象。但是失去了类的一些特性,没有延迟加载,用的人也太少了~~
参考:
http://callmegod.iteye.com/blog/1474441
不错的例子!
http://www.tuicool.com/articles/AjeEfq
原理:
http://www.importnew.com/6461.html
相关推荐
为了解决这个问题,Java引入了枚举类型来实现单例模式,这是一种简洁且线程安全的方法。 枚举在Java中是特殊的类,由JVM自动管理,保证了线程安全。当枚举类被加载时,JVM会自动初始化所有的枚举实例,因此在多线程...
JAVA 枚举单例模式是一种特殊的单例模式实现方式,它使用枚举类型来保证线程安全、防止序列化问题和反射攻击。下面我们将详细解释这个模式的实现原理和源码分析。 线程安全 在 Java 中,枚举类型的实例是在类加载...
此外,单例模式还有几种变体,比如静态内部类单例和枚举单例。静态内部类单例利用Java类加载机制保证了线程安全,而枚举单例则是Java中实现单例的最佳方式,因为它天然支持序列化且防止反射攻击。 在代码实现上,...
本专栏主要为Java程序设计(基础)实验报告和Java程序设计(进阶)...进阶篇有反射、泛型、注解、网络编程、多线程、序列化、数据库、Servlet、JSP、XML解析、单例模式与枚举。本专栏主要为Java入门者提供实验参考。
将单例定义为一个枚举类型,这样不仅能保证线程安全,还能防止反射攻击。枚举是JVM的固有特性,因此它的创建是线程安全的,并且不允许实例化多个枚举实例。 每种实现方式都有其优缺点,选择哪种方式取决于特定的...
在Java中,实现单例模式有多种方法,包括懒汉式(线程不安全)、饿汉式(静态常量)、双检锁(DCL)和枚举单例。其中,双检锁和枚举单例是线程安全的,推荐在多线程环境下使用。 ```java // 双检锁/双重校验锁(DCL...
5. **枚举单例**:利用枚举类型实现单例模式。 - 优点:简洁高效,线程安全,延迟加载。 - 缺点:使用场景受限。 #### 四、单例模式的复杂性 在实际应用中,单例模式可能还会面临更复杂的情况,例如: 1. **DCL...
单例模式是软件设计模式中的一种,其核心思想是确保一个类在整个系统中只有一个实例存在。这在Java中尤其有用,因为多个实例可能导致资源浪费,比如内存占用过多,或者不同实例间的操作不一致。Java中的23种设计模式...
- **枚举方法**:通过枚举类型来隐藏类的构造函数,确保只有一个实例。 4. **注意事项** - 单例模式可能导致程序设计过于复杂,难以进行单元测试。 - 单例模式的实例在程序整个生命周期内存在,可能会导致资源...
5. **枚举类型**:Java枚举是天然的单例模式,既简单又安全。 ```java public enum Singleton { INSTANCE; public void whateverMethod() { } } ``` 然而,单例模式并非总是完美的。它的缺点包括: - **测试...
在Java中实现单例模式有多种方法,包括懒汉式(线程不安全)、饿汉式(线程安全)、双重检查锁定(DCL,线程安全)以及枚举单例。确保单例模式正确实现的关键在于防止多线程环境下的多次实例化和序列化/反序列化时的...
此外,Java 5引入的枚举类型提供了一种简洁、线程安全且避免了反射攻击的单例实现方式: ```java public enum Singleton { INSTANCE; } ``` 单例模式虽然简单实用,但也存在一些缺点,如妨碍了继承、不支持多态...
Java中的枚举类型是线程安全的,并且只会装载一次,设计者充分考虑到了线程安全问题,因此使用枚举实现单例模式是一种简洁而且高效的解决方案。 6. 容器式单例(Singleton Holder) 通过一个私有的静态内部类...
除了上述三种单例模式外,在Java中还可以使用枚举类型来实现单例模式。Java枚举的特性保证了枚举类型的单例性,因为枚举实例是类加载时创建的,且Java虚拟机保证不会创建重复的实例。 单例模式在很多情况下都是很...
除了以上三种经典的实现方式,Java 1.5之后引入了枚举类型,也提供了一种更简洁且线程安全的单例实现方式。通过定义一个枚举类,其中包含一个枚举常量,这个枚举常量即为单例实例。这种方式既保证了线程安全,又避免...
使用枚举类型实现单例,既简单又线程安全,还能防止序列化破坏单例。 ```java public enum Singleton { INSTANCE; public void whateverMethod() { // ... } } ``` 每种方法都有其优缺点。饿汉式虽然简单...
Java枚举类型天然支持单例模式,既简单又线程安全: ```java public enum SingletonClass { INSTANCE; // 可以添加方法 } ``` 这种方式简洁且易于理解和维护,是推荐的单例实现方式。 总之,单例模式通过限制类...
Java中的枚举类型是线程安全的,并且只会装载一次,设计者充分考虑了线程安全问题。因此,枚举的写法也是实现单例模式的最佳实践。 ## 单例模式可能遇到的问题 ### 反序列化破坏单例 当单例对象实现java.io....
将单例定义为枚举类型是一种简洁且线程安全的方式。Java枚举默认是线程安全的,而且防止了反射攻击。 ```java public enum Singleton { INSTANCE; public void whateverMethod() { } } ``` 7. **登记式/注册...
单例模式和多例模式是软件设计模式中的两种重要类型,它们主要用来控制类的实例化过程,确保在系统中某一类只有一个实例或者多个实例。 单例模式是一种限制类的实例化过程,使得一个类在整个应用程序中只能有一个...