单例设计模式

概述

1,模式:在生产实践中,积累下来的经验,办事的套路
2,设计模式:在开发中,针对类,接口,方法等的设计套路,就是设计模式
3,在软件开发中,有23种设计模式,在不同的场景下,不同的需求中,可以使用不同的设计模式良好的解决问题
4,单例设计模式:单:一个,单个;例:实例;在某种情况下,设计一个类,这个类有且仅有一个对象
5,但例设计模式的原则:
1)构造方法私有化
2)在类中创建好对象
3)在例中对外提供获取对象的方式

单例设计模式之饿汉式

1,在加载类的同时,就要初始化静态成员变量,所以旧同事降本类对象创建出来
2,饿汉式:一给食物就吃,类一加载就要创建对象

public class Demo07_SingletonHungry {

	public static void main(String[] args) {
		SingletonHungry sh1 = SingletonHungry.getInstance();
		SingletonHungry sh2 = SingletonHungry.getInstance();
		
		System.out.println(sh1);
		System.out.println(sh2);
	}
}

class SingletonHungry {
	
	//1.构造方法私有化:限制外界创建对象
	private SingletonHungry() {}
	
	//2.在类中创建好对象
	private static SingletonHungry sh = new SingletonHungry();
	
	//3.在类中对外提供获取对象的方式
	public static SingletonHungry getInstance() {
		return sh;
	}
}
**饿汉式简写**

```java
public class Demo07_SingletonHungry {

	public static void main(String[] args) {
		SingletonHungry sh1 = SingletonHungry.getInstance();
		SingletonHungry sh2 = SingletonHungry.getInstance();
		
		System.out.println(sh1);
		System.out.println(sh2);
	}
}

class SingletonHungry {
	
	//1.构造方法私有化:限制外界创建对象
	private SingletonHungry() {}
	
	//2.在类中创建好对象
	private static final SingletonHungry sh = new SingletonHungry();

	}
}

懒汉式
1,懒汉式:在加载类的时候不着急创建对象,等到调用方法经过好几层判断后,非创建不可才去创建,就是懒汉式,能不做就先不做。

public class Demo08_SingletonLazy {

	public static void main(String[] args) {
		
	}
}

class SingletonLazy {
	
	//1.构造方法私有化限制外界创建对象
	private SingletonLazy() {}
	
	//2.在类中提前创建好对象
	private static SingletonLazy sl;
	
	//A B
	
	//3.对外提供公开的获取方式
	public static SingletonLazy getInstance() {
		//内外层的判断一个都不能少,外层主要提高效率,但是如果将内层if去掉,会重新出现线程安全问题
		//3.多线程环境下如果每一次都获取同步锁对象再去判断效率低下,外层加上一个判断,能尽可能的提高效率
		if (sl == null) {
			//2.多线程环境下,无法保证1的线程安全,所以加上同步代码块保证操作的完整性
			synchronized (SingletonLazy.class) {
				//1.判断当前对象是否存在,如果存在就不创建不存在才创建
				if (sl == null) {
					sl = new SingletonLazy();//12345
				}
			} 
		}
		return sl;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值