单例模式(Singleton)探究

本文介绍了单例模式的两种实现方式——饿汉式和懒汉式,对比了它们的区别,并推荐了使用饿汉式。此外,还介绍了一种利用枚举实现单例模式的方法。

单例模式:顾名思义,如果一个类只能创建一个实例,则这个类被称为单例类,这种模式被称为单例模式

一.普通单例模式

普通单例模式创建步骤基本是固定的,即:

1.私有化无参构造器;

2.创建私有化的静态的单例类变量;

3. 创建public 的方法,返回单例类对象

根据创建私有化静态变量时的初始化不同,分为两种创建方法:饿汉式和懒汉式,见下面代码:

饿汉式与懒汉式的区别在于,饿汉式在创建私有化的静态单例变量时直接赋值为本单例类对象,而不是在公共方法中再创建本单例类对象,因为饿,等不及了嘛。而懒汉式,因为懒,所以只在逼不得已的情况下采取创建对象。

饿汉式(推荐使用):

class Singleton {
	// 1.私有化无参构造器
	private Singleton() {
	}

	// 2.创建私有化的静态的单例类变量,并赋值为新建的单例类对象
	private static Singleton instance = new Singleton();

	// 3.创建public 的静态方法,返回值为单例类变量
	public static Singleton getInstance() {
		return instance;
	}
}
懒汉式:
class Singleton {
	// 1.私有化无参构造器
	private Singleton() {
	}

	// 2.创建私有化的静态的单例类变量
	private static Singleton instance;

	// 3.创建public 的静态方法,判断单例类变量是否为null.如果是null,则创建一个新的对象并赋值,否则直接返回
	public static Singleton getInstance() {
		if (instance == null) {
			instance = new Singleton();
		}
		return instance;
	}
}
由于懒汉式存在线程安全问题,所以最好修改为线程安全的,如下:
class Singleton {

	private Singleton() {
	}

	private static Singleton instance = null;

	public static Singleton getInstance() {
		// 使用同步机制,确保线程安全
		// 在同步块外加一个if判断,提高效率。如果instance实例已存在,就不用再等同步块执行结束之后再返回了,可直接返回
		if (instance == null) {
			synchronized (Singleton.class) {// 在静态方法中不能使用this关键字,所以可以使用当前类的Class对象来充当同步监视器,也就是锁
				if (instance == null) {
					instance = new Singleton();
				}
			}
		}
		return instance;
	}
}

综上,由于懒汉式比较复杂,所以如果写单例模式的话,懒汉式和饿汉式相比,最好写饿汉式,比较简单。

二.枚举单例模式

这里的主角不再是类,而是一个枚举。

创建代码如下:

enum Single {
	INSTANCE;
	public void hhda() {
		System.out.println("heheda");
	}
}

public class Test2 {
	public static void main(String[] args) {
		Single s = Single.INSTANCE;
		Single s2 = Single.INSTANCE;
		System.out.println(s.hashCode() == s2.hashCode());
		s.hhda();
	}
}


内容概要:本文档系统性地介绍了2024年最新提出的两种智能优化算法——青蒿素优化算法与霜冰优化算法(RIME)的原理、实现方法及其性能对比分析,并提供了完整的Matlab代码实现。文档不仅聚焦于核心算法的仿真与验证,还整合了大量前沿科研资源,涵盖微电网优化、风电功率预测、无人机三维路径规划、电动汽车调度、图像融合、负荷预测、通信信号处理、电力系统故障恢复等多个高价值应用场景。所有案例均基于Matlab/Simulink平台进行建模与仿真,强调算法在复杂工程系统中的实际应用能力,旨在为科研人员提供一套从理论到代码再到应用的完整复现体系。; 适合人群:具备一定编程基础和科研背景的研究生、高校教师及工程技术人员,尤其适合从事智能优化算法研究、新能源系统优化、自动化控制、电力系统调度、无人机导航与路径规划等相关领域的研究人员。; 使用场景及目标:①用于高水平学术论文的复现与创新性研究,提升科研效率与成果产出;②应用于复杂工程系统的建模仿真与智能优化设计,如多能互补系统调度、无人机避障路径规划、微电网能量管理等;③作为智能优化算法的教学与学习资料,深入理解现代元启发式算法的设计思想与实现机制。; 阅读建议:建议读者结合文档中提供的Matlab代码与Simulink仿真模型,按照目录结构循序渐进地学习与实践,优先选择与自身研究方向契合的案例进行代码复现,重点关注算法参数设置、收敛曲线分析与多算法对比实验部分,以全面提升算法应用与科研创新能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值