饿汉单例
// 饿汉单例模式
// 饿汉单例在获取对象前,对象已经提前准备好了一个, 这个对象只能是一个,所以定义静态成员变量记住
public static SingleInstance instance = new SingleInstance(); // 实例化静态对象
// 必须定义私有构造器
private SingleInstance() {}
package com.code.static_singleinstance;
public class Test1 {
public static void main(String[] args) {
// 理解饿汉单例的设计步骤
SingleInstance s1 = SingleInstance.instance; // 地址相同
SingleInstance s2 = SingleInstance.instance; // 地址相同
if (s1 == s2) {
System.out.println("yes!");
}
}
}
懒汉单例
package com.code.static_singleinstance;
public class SingleInstance02 {
/**
* 2. 定义一个静态成员变量负责存储一个对象
* 只加载一次,只有一份
* 最好私有化,避免给别人挖坑
*/
private static SingleInstance02 instance;
/**
* 3.定义方法,对外返回单例对象
*/
public static SingleInstance02 getInstance() {
if (instance == null) { // 如果没有就创建对象,如果有 return instance
// 第一次拿对象
// 创建对象
instance = new SingleInstance02();
}
return instance;
}
/**
* 私有化构造器
*/
private SingleInstance02(){}
}
package com.sijiaqi.d4_static_singleinstance;
public class Test2 {
public static void main(String[] args) {
// 目标: 账务懒汉单例
SingleInstance02 s1 = SingleInstance02.getInstance();
SingleInstance02 s2 = SingleInstance02.getInstance();
System.out.println(s1); // 地址相同
System.out.println(s2); // 地址相同
}
}