创建型设计模式_单例模式(饿汉、懒汉、优化后的懒汉)

一、单例模式

1.是确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

2.某个类只能有一个实例。

3.类必须自行创建这个实例。

4.以公共、统一的方式向整个系统提供这个实例。

二、单例模式的实现—饿汉式

//饿汉式:牺牲了空间资源,节约了时间效率,因为是立即加载。
public class HungrySingleton {
	private static HungrySingleton hungry_instance=new HungrySingleton();//用static修饰创建的对象,表示属于类,被类共享,只有一份。
	private HungrySingleton() {	//构造方法私有化,外部不能创建此对象了。
		
	}
	public static HungrySingleton getInstance() { //提供公有静态的方法获得实例对象,静态方法属于类的,通过类名.方法名访问
		return hungry_instance;
	}
}

三、单例模式-懒汉式

//懒汉式:节省了空间,降低了时间效率。
//延时加载,真正用到的时候再创建
public class LazySingleton {
	private static LazySingleton instance;//类初始化时,不初始化这个对象。
	private LazySingleton() {//私有化构造方法,是为了不让外部创建对象。
		
	}
	public synchronized static LazySingleton getInstance() {//静态方法,可以通过类名访问
		if(instance==null) {	//当没有实例对象时,才创建实例对象
			instance=new LazySingleton();
		}
		return instance;
	}
}

四、单例模式-静态内部类的懒汉式

//优化后的懒汉式:节省了空间,降低了时间效率。
//静态内部类形式,即实现了线程安全,又避免了同步带来的性能影响。
public class LazySingleton2 {
	private static class Inner{ //静态内部类,初始化只有一次。
		private static final LazySingleton2 instance=new LazySingleton2();
	}
	private LazySingleton2() {//私有化构造方法,是为了不让外部创建对象。
		
	}
	public static LazySingleton2 getInstance() {//线程安全,调用效率高,并且不会在外部类初始化时就直接加载,只有当调用了方法时才会加载,实现了延迟加载。
		return Inner.instance;
	}
}

四、测试结果

发布了74 篇原创文章 · 获赞 32 · 访问量 9984

猜你喜欢

转载自blog.csdn.net/qq_41629684/article/details/104341773