请解释枚举和单例的区别?

package com.itheima;

public class SingleClass {
	public static void main(String [] args){
		/*
		 * 区别:Java枚举实现的基本思想是通过公有静态的final常量的集合。
		 * Java的枚举是单例的泛型化,本质上就是单元素的枚举。
		 */
	}
}

/**
 * 
 * @author Administrator
 * 单例设计模式
 */
class Single{
	private Single sigle = new Single();
	private Single(){};
	public Single getSingle()
	{
		return this.sigle;
	}
}
/**
 * 
 * @author Administrator
 * 枚举类
 */
 enum Color{
	Red,Black
}

### 模式的定义 模式(Singleton Pattern)是一种创建型设计模式,其核心目标是确保一个类只有一个实,并提供一个全局访问点[^1]。这种模式通常用于需要控制资源的情况下,比如数据库连接池、线程池或者配置管理器。 --- ### C#中的模式实现方法 以下是几种常见的模式实现方式: #### 方法一:懒汉式模式 在这种实现中,对象仅在第一次调用 `Instance` 属性时被创建。这种方法利用了静态字段锁机制来保证线程安全。 ```csharp public class Singleton { private static readonly object _lock = new object(); private static Singleton _instance; private Singleton() { } public static Singleton Instance { get { lock (_lock) { if (_instance == null) _instance = new Singleton(); return _instance; } } } } ``` 此方法适用于延迟加载的情况,但在多线程环境下性能可能受到影响[^1]。 --- #### 方法二:饿汉式模式 该方法在类加载时就初始化实,因此不存在线程安全问题。然而,它不支持延迟加载。 ```csharp public class Singleton { private static readonly Singleton _instance = new Singleton(); private Singleton() { } public static Singleton Instance => _instance; } ``` 由于实化发生在类加载阶段,饿汉式模式非常简洁且高效[^2]。 --- #### 方法三:双重锁定机制 (Double-Checked Locking) 这是一种优化后的懒汉式模式,在减少锁开销的同时保持线程安全性。 ```csharp public class Singleton { private volatile static Singleton _instance; private static readonly object _lock = new object(); private Singleton() { } public static Singleton Instance { get { if (_instance == null) { lock (_lock) { if (_instance == null) _instance = new Singleton(); } } return _instance; } } } ``` 通过两次检查 `_instance` 是否为空,减少了不必要的同步操作,从而提高了效率。 --- #### 方法四:基于枚举模式 这是《Effective Java》推荐的一种实现方式,具有天然的序列化保护反射攻击防护能力。 ```csharp public enum Singleton { INSTANCE; public void DoSomething() { Console.WriteLine("Action performed."); } } // 使用示 Singleton.INSTANCE.DoSomething(); ``` 枚举类型的模式不仅代码简,还能够自动处理反序列化的复杂情况[^3]。 --- ### 总结 以上介绍了四种不同的模式实现方法,分别是懒汉式、饿汉式、双重锁定机制以及基于枚举的方式。每种方法各有特点,开发者可以根据实际需求选择最合适的方案。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值