饿汉单例
// 饿汉单例模式 // 饿汉单例在获取对象前,对象已经提前准备好了一个, 这个对象只能是一个,所以定义静态成员变量记住 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); // 地址相同 } }