单例设计模式 && 枚举数据

本文深入解析单例设计模式,涵盖其功能、实现方式包括饿汉式、懒汉式及枚举实现,探讨不同场景下的应用与优缺点。

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

单例设计模式

	1、单例设计模式:
	 	功能:定义的某个类,在系统中最多只能有一个对象
	 	实现:即时加载(饿汉式)、延迟加载(懒汉式)

2. 饿汉式

	1、单例设计模式的原则:
	 	1、不能让外界创建对象:私有化构造方法
	 	2、在类中将对象创建好
	 	3、提供返回对象的方式
	2、饿汉式:
	 	1、私有化构造方法
	 	2、声明当前类静态引用,直接创建对象
	 	3、提供静态方法,返回引用

3. 懒汉式

	1、延迟加载:
	 	在不使用这个对象的时候,坚决不创建这个对象
	 	只有到了不得不创建的时候,才去创建
	2、实现:
	 	1、声明引用时,不创建对象
	 	2、在获取对象的方法中创建对象
	 	3、外层判断,用于提升效率,过滤大部分不为null的情况
	 	4、内层判断,用于在同步代码块中确保引用确实为null
		5. 代码实现
			 class MySingleton2 {
					private MySingleton2() {
						
					}
					
					private static MySingleton2 m;
					
					public static MySingleton2 getInstance() {
						//如果某条线程判断m==null,并不能说明m确实就可以被赋值
						if (m == null) {
							synchronized (MySingleton2.class) {
								if (m == null) {
									m = new MySingleton2();
								}
							}
						}
						//如果,m==null判断为假,一定可以确定m已经被赋值了,可以直接返回
						return m;
						}
					}

4. 老汉式(书面不存在)

	1、属于饿汉式的一种
	2、实现:
	 	不定义方法了,直接将引用设定为公共的
	 	加上final只能访问,不能修改
	 class MySingleton3 {
			private MySingleton3() {
				
			}
			
			public static final MySingleton3 m = new MySingleton3();
		}

枚举数据

1. 普通枚举

	enum EnumWeekday1 {
		MON, TUE, WED;
	}

2. 带私有成员变量

	enum EnumWeekday2 {
			MON("星期一"), TUE("星期二"), WED("星期三");
			private String name;

			private EnumWeekday2(String name) {
				this.name = name;
			}

			public String getName() {
				return name;
			}

			public void setName(String name) {
				this.name = name;
			}
		}

3. 带抽象方法

	enum EnumWeekday3 {
			MON("星期一") {
				@Override
				public void show() {
					System.out.println("今天星期一,我去买大衣");
				}
			}, 
			TUE("星期二") {
				@Override
				public void show() {
					System.out.println("今天星期二,我去买手绢儿");
				}
			},
			WED("星期三") {
				@Override
				public void show() {
					System.out.println("今天星期三,我去买板砖");
				}
			};
			private String name;

			private EnumWeekday3(String name) {
				this.name = name;
			}

			public String getName() {
				return name;
			}

			public void setName(String name) {
				this.name = name;
			}
			
			public abstract void show();
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值