B站尚硅谷学习之单例模式(一)
一、单例模式:所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类中只能存在一个对象实例,并且该类中只提供一个取得其对象实例的方法。
二、懒汉式及饿汉式实现思路及代码。
/**
* 单例模式懒汉式实例
*/
public class LazySingletonTest {
//1、私有化构造方法,防止外部创建对象
private LazySingletonTest() {};
//2、要给该对象声明私有化,防止外部调用。
//5、因提供获取对象的方法是静态的,所以这个创建的对象必须用静态(static)来声明
private static LazySingletonTest instance = null;
//3、提供可供调用对象的方法,因该对象初始方式为null,需要判断该对象是否被创建,如果创建了直接返回,未创建,那么创建一个对象。
//4、因该类的构造函数被私有化,无法通过new的方式调用,必须通过类调用,所以该方法必须用静态(static)的方式。
public static LazySingletonTest getInstance() {
if (instance == null) {
instance = new LazySingletonTest();
}
return instance;
}
}
class LazyTest {
public static void main(String[] args) {
LazySingletonTest instance1 = LazySingletonTest.getInstance();
LazySingletonTest instance2 = LazySingletonTest.getInstance();
System.out.println(instance1 == instance2);
}
}
/**
* 单例模式-饿汉式
*/
public class HungrySingletonTest {
//1、私有化构造方法,防止外部创建对象
private HungrySingletonTest() {};
//2、要给该对象私有化,防止外部调用。
//5、因提供获取对象的方法是静态的,所以这个创建的对象必须用静态(static)来声明
private static HungrySingletonTest instance = new HungrySingletonTest();
//3、提供可供调用对象的方法。
//4、因该类的构造函数被私有化,无法通过new的方式调用,必须通过类调用,所以该方法必须用静态(static)的方式。
public static HungrySingletonTest getInstance() {
return instance;
}
}
class HungryTest {
public static void main(String[] args) {
HungrySingletonTest instance1 = HungrySingletonTest.getInstance();
HungrySingletonTest instance2 = HungrySingletonTest.getInstance();
System.out.println(instance1 == instance2);
}
}
三、两种单例模式优缺点。
1、饿汉式单例模式:随着类的加载而加载,优点是写法简单,没有线程安全的问题,缺点是占用内存。
2、懒汉式单例模式:只有在需要的时候才加载,优点是节省内存,缺点暂时会有线程安全的问题,可通过家synchronized关键字解决此问题。
四、单例模式的应用。
1、 jdk中runtime类。
2、windows中的任务管理器和回收站。
3、日志系统以及线程池的设计。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~