Lazy initialization type
Lazy initialization type 指的是只有在需要的時候才創建物件,當呼叫getInstance()的方法時,只有在instance為空值時才會創建物件,否則直接return Object。
class SingletonPattern
public class SingletonPattern {
//TODO SingletonPattern 重點
//TODO 宣告 SingletonPattern Object, Modifier 定義為 private and static
private static SingletonPattern instance;
//TODO 定義 建構子為 private
private SingletonPattern(){}
public static SingletonPattern getInstance(){
//TODO 第一次被呼叫的時候才建立物件
if(instance == null){
instance = new SingletonPattern();
System.out.println("Singleton instance 已被實例化");
}
return instance;
}
}
class Main
SingletonPattern Object透過 SingletonPattern.getInstance()
instance Object
public class Main {
public static void main(String[] args) {
SingletonPattern singletonPattern = SingletonPattern.getInstance();
SingletonPattern singletonPattern2 = SingletonPattern.getInstance();
System.out.println("Object1 : "+singletonPattern.hashCode() +"\n"+ "Object2 : " + singletonPattern2.hashCode());
}
}
Test Result
分別創建兩個物件,來自SingletonPattern Class,可以看到”Singleton instance 已被實例化”只出現一次,而這兩個物件的記憶體位子來自同一個。
Singleton instance 已被實例化
Object1 : Singleton.SingletonPattern@27d6c5e0
Object2 : Singleton.SingletonPattern@27d6c5e0