Java中单例模式

什么是单例模式?

  1. 构造方法私有化

  2. 静态属性指向实例

  3. public static的 getInstance方法,返回第二步的静态属性

饿汉式是立即加载的方式,无论是否会用到这个对象,都会加载。

package charactor;
 
public class GiantDragon {
 
    //私有化构造方法使得该类无法在外部通过new 进行实例化
    private GiantDragon(){
         
    }
 
    //准备一个类属性,指向一个实例化对象。 因为是类属性,所以只有一个
 
    private static GiantDragon instance = new GiantDragon();
     
    //public static 方法,提供给调用者获取12行定义的对象
    public static GiantDragon getInstance(){
        return instance;
    }
     
}


package charactor;

public class TestGiantDragon {

	public static void main(String[] args) {
		//通过new实例化会报错
//		GiantDragon g = new GiantDragon();
		
		//只能通过getInstance得到对象
		
		GiantDragon g1 = GiantDragon.getInstance();
		GiantDragon g2 = GiantDragon.getInstance();
		GiantDragon g3 = GiantDragon.getInstance();
		
		//都是同一个对象
		System.out.println(g1==g2);
		System.out.println(g1==g3);
	}
}

懒汉式单例模式与饿汉式单例模式不同,只有在调用getInstance的时候,才会创建实例

package charactor;

public class GiantDragon {
 
    //私有化构造方法使得该类无法在外部通过new 进行实例化
    private GiantDragon(){        
    }
 
    //准备一个类属性,用于指向一个实例化对象,但是暂时指向null
    private static GiantDragon instance;
     
    //public static 方法,返回实例对象
    public static GiantDragon getInstance(){
    	//第一次访问的时候,发现instance没有指向任何对象,这时实例化一个对象
    	if(instance == null){
    		instance = new GiantDragon();
    	}
    	//返回 instance指向的对象
        return instance;
    }
     
}
相关推荐
人才程序员2 分钟前
详解Qt 中使用虚拟键盘(软键盘qtvirtualkeyboard)
开发语言·数据库·c++·qt·计算机外设·界面·c语音
喵呜角角4 分钟前
QML TableView 实例演示 + 可能遇到的一些问题(Qt_6_5_3)
开发语言·windows·qt·qml·qt quick
撸码到无法自拔4 分钟前
R语言贝叶斯分析:INLA 、MCMC混合模型、生存分析肿瘤临床试验、间歇泉喷发时间数据应用|附数据代码...
开发语言·r语言
SSONICX4 分钟前
QT:生成二维码 QRCode
开发语言·qt
老汉忒cpp7 分钟前
Qt-系统相关(1)事件&文件
开发语言·qt
paterWang14 分钟前
小程序-基于java+SpringBoot+Vue的美食推荐系统设计与实现
java·spring boot·小程序
《源码好优多》15 分钟前
基于Java Springboot餐饮美食分享平台
java·spring boot·美食
说书客啊18 分钟前
计算机毕业设计 | SpringBoot+vue美食推荐商城 食品零食购物平台(附源码+论文)
java·spring boot·node.js·vue·毕业设计·课程设计·美食
小宋102127 分钟前
实现java执行kettle并传参数
java·开发语言·etl
FreeLikeTheWind.41 分钟前
C语言实例之9斐波那契数列实现
c语言·开发语言·算法