欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

单例的饿汉与懒汉模式

程序员文章站 2022-03-07 20:03:20
...

单例模式
一个类只创建一个实例,每次都获取的同一个对象
单例模式分为饿汉模式和懒汉模式
单例模式的三要素:
1、构造方法私有化
2、静态属性指向实例
3、public static 的xx方法要返回实例

饿汉模式

立即加载,无论是否用到这个对象都会加载
无论如何都会创建一个对象
启动的时间较长,使用的时候较快

public class Hunger {
	/**
	 * 单例模式:一个类只创建一个实例。每次都获取同一个对象
	 * 饿汉单例模式:无论如何都会创建一个对象
	 */
	
	//私有化构造方法,使得该类无法在外部通过new来实例化
	private Hunger() {
		
	}
	
	//用new来实例化 一个对象
	public static Hunger show = new Hunger();
	
	//public static 来提供给调用者new的对象
	public static Hunger getShow() {
		
		return show;
	}
	
}

public class HungerTest {

	public static void main(String[] args) {

		//直接创建对象会报错
		//Hunger h = new Hunger();
		
		
		//只能通过Hunger中的getShow来获取对象
		Hunger h1 = Hunger.getShow();
		Hunger h2 = Hunger.getShow();//h1,h2都是同一个对象
		
		System.out.println(h1==h2);
	}

}
//结果为:true

懒汉模式
延迟加载,只有在使用的时候才加载
只有在调用方法的时候才创建实例
启动快,第一次使用的时候慢

public class Lazy {
	/**
	 * 单例模式:一个类只创建一个实例
	 *   懒汉模式:只有在调用方法的时候才创建实例
	 */
	
	//私有化构造函数,使它不能通过new来创建实例
	private Lazy() {
		
	}
	
	//准备一个实例化属性,指向null
	public static Lazy show;
	

	//public static 方法,返回实例对象
	public static Lazy getShow() {
		//判断实例是否为空,如果为空就创建实例
		if(null == show) {
			show = new Lazy();
		}
		//返回实例指向的对象
		return show;
	}
}
public class LazyTest {

	public static void main(String[] args) {
	
		Lazy l1 = Lazy.getShow();
		Lazy l2 = Lazy.getShow(); //l1,l2都是同一个对象
		
		System.out.println(l1==l2);
	}

}
//结果为:true

当有充分的启动和初始化的时间时,使用饿汉模式,否则使用懒汉模式

相关标签: 单例模式 java