单例模式
-
单例模式:保证一个类只有一个实例,并且提供一个访问该类的全局访问点
-
举例那些地方用到了单例模式:
windows的回收站、任务管理器;多线程的线程池:方便对线程池内的线程进行控制
-
优点:
-
在单例模式中,活动的单例只有一个实例,对单例类的所有实例化得到的都是相同的一个实例,确保了其他对象访问的都是一个实例;
-
提供了对唯一实例的受控访问;
-
在系统内存中只有一个实例,节约了系统资源,当频繁的创建和销毁对象时,单例模式提高了系统的效率
-
避免了对共享资源的多重占用;
-
-
缺点:
- 不适用多变的对象
- 单例类职责过重,一定程度违反单一职责原则
-
代码实例
- 饿汉单例:类初始化时就加载该对象,调用效率高,线程天生安全。
/* 饿汉单例 */ class Single{ //1.私有化类的构造 private Single(){ } //2.声明当前类对象,没初始化 //4.此对象也必须为静态static的 private static Single instance = null; static { instance = new Single(); } //3.声明public、static的返回当前对象的方法 public static Single getInstance(){ return instance; } }
- 懒汉单例:类初始化时不会初始化该对象,使用的时候才会创建该对象,具备懒加载功能
/* 懒汉单例 */ class LazySingle{ private LazySingle(){ } private static LazySingle instance = null; public static LazySingle getInstance(){ if(instance==null){ synchronized(LazySingle.class){//同步锁 if(instance==null){ instance = new LazySingle(); } } } return instance; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人