Java的单例模式与延时加载

本文深入探讨了单例模式的应用场景及其优势,并详细介绍了如何通过延迟加载技术优化对象创建过程,以提高程序性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先我们看单例模式代码,一般来说我们是这样写的:

public class Singleton           
{           
    private Singleton(){}    // 默认构造器私有防止使用new关键字实例化。

    private static Singleton instance = new Singleton();           

    public static Singleton getInstance(){           
        return instance;           
    }           
}

可以用下面的方式测试是否是创建出同一个对象:

Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
		
if( singleton1 == singleton2)
	System.out.println("创建了一个实例");
else
	System.out.println("创建了两个实例");

单例模式简单方便,使用场景也不少。比如:

1、web应用的配置对象的读取,配置文件是共享的资源。

2、数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。

3、多线程的线程池,这是由于线程池要方便对池中的线程进行控制。

4、 网站的计数器,一般也是采用单例模式实现,否则难以同步。

5、日志文件的记录。这一般是由于共享的日志文件一直处于打开状态,因为只能有一个实例去操作,否则内容不好追加。


从上述应用的场景可以看出一些共同点:

A、资源共享的情况下,避免由于资源操作时导致的性能或损耗等。如上述中的日志文件,应用配置。

B、控制资源的情况下,方便资源之间的互相通信。如线程池等。


===================================================================================


延迟加载主要表达的思想就是,在对象使用的时候创建,而不是对象实例化的时候创建。这种方式避免了性能的浪费。


当创建一个对象的子对象开销比较大时,而且有可能在程序中用不到这个子对象,那可以考虑用延迟加载的方式来创建子对象。另外就是当一个程序启动时,需要创建多个对象,但仅有几个对象需要立即使用,那么可以将一些不必要的初始化工作延迟到使用的时候。这样可以提高程序的启动速度。


延迟加载技术使用的代表作:Hibernate框架。


我们对代码修改如下:

public class Singleton {

	private Singleton(){}

	public static Singleton getInstance(){
		return SingleTonHolder.instance;
	}

	static private class SingleTonHolder{//在内部类进行初始化达到延迟加载的目的
		private static Singleton instance = new Singleton(); 
	}
}









一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值