单例模式:保证内存中只有类的一个实例对象
应用场景:比如读取配置文件的对象,只需要一个,对数据库进行增删改的对象也应保证只有一个,还有游戏中起中央控制器作用的类,也应只有一个
单例模式的两种形态:饿汉式和懒汉式
首先来看饿汉式:提前加载- //饿汉式
- public class Single1 {
- private static Single1 instance = new Single1();
- private Single1() {}
- public static Single1 getInstance() {
- return instance;
- }
- }
复制代码 再来看懒汉式:延迟加载- //懒汉式
- public class Single2 {
- private static Single2 instance = null;
- private Single2() {}
- public static Single2 getInstance() {
- if(instance == null) {
- synchronized (Single2.class) { //加锁防止程序在此处停止,造出创建多个对象
- if(instance == null) {
- instance = new Single2();
- }
- }
- }
- return instance;
- }
- }
复制代码 上面有位同学写的懒汉式没有加锁,可能会导致多个线程阻塞再唤醒后创建了多个对象,这就失去了单例的意义
因为单例模式的这个对象迟早都要用,所以无所谓延迟加载和提前加载,推荐使用饿汉式
|