JAVA设计模式 -- 单例模式学习笔记

本文深入探讨了单例模式在Java中的应用,包括懒汉模式、饿汉模式和IODH模式的实现原理及代码示例,解析了不同场景下选择合适模式的重要性。

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

	在JAVA当中,如果我们需要创建一个对象,一般是通过该类new()一个对象,但是如果在程序当中很多地方都需要用到该对象,我们不可能这样随心所欲的通过new()来创建对象,因为每当我们new一个对象的时候,都会消耗对应的内存资源,如果该对象的内容足够大的话,因为内存资源的有限,这种做法很不可取。
	因为我们一般使用的时候往往只需要用到该对象的一个或者几个属性,并不是全部都会去调用,所以我们可以通过单例模式来解决这个问题。
	单例模式又可以分为懒汉,饿汉,双重锁以及IODH这几种模式,我们可以根据实际需求进行设计:
    首先,懒汉模式: 
懒汉模式是单例模式的一种,对象在需要使用的地方才会被通过getinstance()方法创建

 1 public class LazySingleton {
 2     private static LazySingleton instance = null;
 3 
 4     private LazySingleton() {
 5     }
 6 
 7     public static LazySingleton getInstance() {
 8         if (instance == null) {
 9             instance = new LazySingleton();
10         }
11         return instance;
12     }
13 
14     public static void main(String[] args) {
15         /*
16             懒汉模式是单例模式的一种,对象在需要使用的地方才会被通过getinstance()方法创建
17          */
18         //创建3个懒汉模式对象
19         LazySingleton lsl1 = LazySingleton.getInstance();
20         LazySingleton lsl2 = LazySingleton.getInstance();
21         LazySingleton lsl3 = LazySingleton.getInstance();
22         //输出,结果这三个对象的引用地址都是一样的
23         System.out.println(lsl1);
24         System.out.println(lsl2);
25         System.out.println(lsl3);
26     }
27 }

	其次,饿汉模式
		饿汉模式相对于懒汉模式,对象的创建和产生提前了,在类加载的时候就已经被创建,对于一些需要提前创建或者准备的类,可以使用饿汉模式来设计这个类。

 1 public class EagerSingleton {
 4 // 创建一个静态对象并初始化
 5 private static final EagerSingleton instance = new EagerSingleton();
 6 
 7 // 无参构造
 8 private EagerSingleton() {
 9 }
10 
11 // 创建获取对象的方法
12 public static EagerSingleton getInstance() {
13 return instance; //返回一开始创建的对象
14 }
15 
16 public static void main(String[] args) {
17 // 创建3个对象 然后比较是否相等
18 EagerSingleton egl1 = EagerSingleton.getInstance();
19 EagerSingleton egl2 = EagerSingleton.getInstance();
20 EagerSingleton egl3 = EagerSingleton.getInstance();
21 
22 // 输出结果
23 System.out.println(egl1 == egl2); // true
24 System.out.println(egl2 == egl3); // true
25 }
26 }

	然后是Iodh模式
  		Iodh模式,我看来就是对饿汉模式从设计结构上面进行了一些改进或者优化,Iodh模式在对象的创建方式上是通过内部类来实现的,来,上代码

 1 public class Singleton {
 2     // 创建无参构造
 3     private Singleton() {
 4     }
 5     // 创建getinstance()方法获取对象
 6     public static Singleton getInstance(){
 7         return HolderClass.instance; // 通过Holderclass这个类.属性名的方式获取对象
 8     }
 9     // 创建一个私有的静态的内部类
10     private static class HolderClass{
11         // 定义一个静态常量并初始化对象
12         private final static Singleton instance = new Singleton();
13     }
14 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

国服酱紫牙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值