传统的实现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
相关推荐
- 是实现单例模式的最佳方法之一,能够避免多线程同步问题,而且实现简单。 ```java public enum Singleton { INSTANCE; public void someMethod() { // ... } } ``` ### Java中的final、finally、...
设计模式是软件工程中的一种最佳实践,它提供了一套可重用的解决方案,用来解决在软件设计中常见的问题。在Java编程中,设计模式的应用能够提高代码的可读性、可维护性和可扩展性。本资源包含了一系列用Java实现的...
- 枚举工厂模式(Enum Singleton):使用Java枚举类型实现单例模式,保证线程安全且防止反序列化重新创建新实例。 2. 结构型模式(Structural Patterns): - 适配器模式(Adapter):将两个不兼容的接口转换为一...
设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中常见的问题,提供了一套可重用的解决方案。C#,作为.NET框架的主要编程语言,广泛应用于构建各种复杂的应用程序,设计模式在C#开发中扮演着至关重要的...
在C#中,通常通过静态成员或枚举来实现单例,以确保线程安全和内存管理。 2. **工厂模式(Factory Method)**:定义一个用于创建对象的接口,让子类决定实例化哪一个类。在C#中,可以使用抽象工厂类或者接口来实现...
3. **枚举类型**:简单且线程安全的方式。 #### 输出1-100以内的质数 **质数**定义:只能被1和自身整除的大于1的自然数。 **算法实现**: 1. **暴力循环**:对于每个数n,检查2至n-1之间的数能否整除n。 2. **...
在Java中,单例模式通常通过双重检查锁定、静态内部类或者枚举类型实现。例如,`Singleton`类的实现可以防止多线程环境下的多个实例创建。 2. **工厂模式**:提供一个接口来创建对象,但让子类决定实例化哪个类。...
8. State Machine实现方法:状态机可以用多种方式实现,比如枚举、类、函数指针等,各自的实现有各自的优缺点,如性能、可读性和灵活性。 9. 多线程同步操作:互斥锁(Mutex)是常用的一种同步机制,但其可能带来的...
Go语言中的状态机实现通常涉及状态枚举和类型断言。 20. 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的...
在Java中,可以使用枚举、双重检查锁定(DCL)或者静态内部类等方式来实现。例如: ```java public class Singleton { private static volatile Singleton instance; private Singleton() {} public static ...
- **指针、数组与字符串**: 指针用于存储内存地址,数组是一系列相同类型的元素集合,字符串是一种特殊的字符数组。 - **多文件程序结构**: 大型项目通常被拆分成多个文件进行管理,每个文件负责一部分功能。 **1.3...