`
xieyan30
  • 浏览: 49374 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

单元素的枚举类型已经成为实现Singleton的最佳方法

 
阅读更多

传统的实现singleton的方法

1,提供一个已经被实例化的对象,并且将构造方法私有化

 

public static final SingleTon INSTANCE = new SingleTon();
private SingleTon() {}

 

 

2,提供一个static方法

 

private static final SingleTon INSTANCE = new SingleTon();
private SingleTon() {}
public static SingleTon getInstance() {
	return INSTANCE;
}

 

 

但是这两种方式都可以用反射来生成新对象

SingleTon s1 = SingleTon.INSTANCE;

Class<SingleTon> cls = SingleTon.class;
Constructor<SingleTon> constructor = cls.getDeclaredConstructor(new Class[] {});
constructor.setAccessible(true);
SingleTon s2 = constructor.newInstance(new Object[] {});

System.out.println(s1 == s2);

结果是:false 

从java1.5版本开始,实现singleton出现了第三种方式

public enum SingleTon {
	INSTANCE;
	public void speak() {
		System.out.println(this + " is speaking! ");
	}
}

 测试代码

public class SingleTonTest {

	public static void main(String[] args) throws Exception {
		SingleTon s1 = SingleTon.INSTANCE;
		s1.speak();
		SingleTon s2 = SingleTon.INSTANCE;
		s2.speak();
		System.out.println(s1 == s2);
	}
}

测试结果:
INSTANCE is speaking! 
INSTANCE is speaking! 
true

 

 

0
0
分享到:
评论

相关推荐

    Java经典试题及答案

    - 是实现单例模式的最佳方法之一,能够避免多线程同步问题,而且实现简单。 ```java public enum Singleton { INSTANCE; public void someMethod() { // ... } } ``` ### Java中的final、finally、...

    设计模式代码(Java实现)

    设计模式是软件工程中的一种最佳实践,它提供了一套可重用的解决方案,用来解决在软件设计中常见的问题。在Java编程中,设计模式的应用能够提高代码的可读性、可维护性和可扩展性。本资源包含了一系列用Java实现的...

    Java设计模式 影印

    - 枚举工厂模式(Enum Singleton):使用Java枚举类型实现单例模式,保证线程安全且防止反序列化重新创建新实例。 2. 结构型模式(Structural Patterns): - 适配器模式(Adapter):将两个不兼容的接口转换为一...

    23种设计模式源码(c#)

    设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题,提供了一套可重用的解决方案。C#,作为.NET框架的主要编程语言,广泛应用于构建各种复杂的应用程序,设计模式在C#开发中扮演着至关重要的...

    模式设计 c#.net 源码

    在C#中,通常通过静态成员或枚举来实现单例,以确保线程安全和内存管理。 2. **工厂模式(Factory Method)**:定义一个用于创建对象的接口,让子类决定实例化哪一个类。在C#中,可以使用抽象工厂类或者接口来实现...

    中科软,文思 面试题

    3. **枚举类型**:简单且线程安全的方式。 #### 输出1-100以内的质数 **质数**定义:只能被1和自身整除的大于1的自然数。 **算法实现**: 1. **暴力循环**:对于每个数n,检查2至n-1之间的数能否整除n。 2. **...

    Patterns in Java(java 设计模式)

    在Java中,单例模式通常通过双重检查锁定、静态内部类或者枚举类型实现。例如,`Singleton`类的实现可以防止多线程环境下的多个实例创建。 2. **工厂模式**:提供一个接口来创建对象,但让子类决定实例化哪个类。...

    MITBBS 面试题整理

    8. State Machine实现方法:状态机可以用多种方式实现,比如枚举、类、函数指针等,各自的实现有各自的优缺点,如性能、可读性和灵活性。 9. 多线程同步操作:互斥锁(Mutex)是常用的一种同步机制,但其可能带来的...

    go-patterns:基于重构大师的My Golang设计模式实现

    Go语言中的状态机实现通常涉及状态枚举和类型断言。 20. 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的...

    DesignPatternsImplementation

    在Java中,可以使用枚举、双重检查锁定(DCL)或者静态内部类等方式来实现。例如: ```java public class Singleton { private static volatile Singleton instance; private Singleton() {} public static ...

    游戏制作初级文档

    - **指针、数组与字符串**: 指针用于存储内存地址,数组是一系列相同类型的元素集合,字符串是一种特殊的字符数组。 - **多文件程序结构**: 大型项目通常被拆分成多个文件进行管理,每个文件负责一部分功能。 **1.3...

Global site tag (gtag.js) - Google Analytics