//DragonGuardian.java
public class DragonGuardian {
// 私有靜態實例
private static DragonGuardian instance;
private String treasureOrb;
// 私有建構子,防止外部直接實例化
private DragonGuardian() {
this.treasureOrb = "創世魔法寶珠";
System.out.println("古老巨龍覺醒了,開始守護寶珠...");
}
// 公開的靜態方法,提供全域訪問點
public static DragonGuardian getInstance() {
if (instance == null) {
instance = new DragonGuardian();
}
return instance;
}
// 取得寶珠的力量
public String getTreasurePower() {
return "你獲得了 " + treasureOrb + " 的力量!";
}
// 展示巨龍的獨特性
public void showIdentity() {
// 使用hashCode來判斷是否為同一個值
System.out.println("我即是唯一,別無他物。我是 " + this.hashCode());
}
}
//SingletonExample.java
// 使用範例
public class SingletonExample {
public static void main(String[] args) {
// 嘗試獲取巨龍實例
DragonGuardian dragon1 = DragonGuardian.getInstance();
DragonGuardian dragon2 = DragonGuardian.getInstance();
// 驗證是否為同一個實例
dragon1.showIdentity();
dragon2.showIdentity();
// 使用寶珠力量
System.out.println(dragon1.getTreasurePower());
System.out.println(dragon2.getTreasurePower());
// 驗證兩個變數指向同一個物件
System.out.println("是同一條龍嗎? " + (dragon1 == dragon2));
/**output
古老巨龍覺醒了,開始守護寶珠...
我即是唯一,別無他物。我是 804564176
我即是唯一,別無他物。我是 804564176
你獲得了 創世魔法寶珠 的力量!
你獲得了 創世魔法寶珠 的力量!
是同一條龍嗎? true
*/
//備註: 讀者實際執行不會是 804564176
}
}
// 使用 ES6 方式的靜態方法版本
class DragonGuardianStatic {
constructor() {
this.treasureOrb = "創世魔法寶珠";
console.log("古老巨龍覺醒了,開始守護寶珠...");
}
static getInstance() {
if (!DragonGuardianStatic.instance) {
DragonGuardianStatic.instance = new DragonGuardianStatic();
}
return DragonGuardianStatic.instance;
}
getTreasurePower() {
return `你獲得了 ${this.treasureOrb} 的力量!`;
}
showIdentity() {
// 每個函數(包括類別)都有一個 name 屬性,它包含了函數或類別的名稱。
console.log(`我即是唯一,別無他物。實例: ${this.constructor.name}`);
}
}
// 使用範例
const dragon3 = DragonGuardianStatic.getInstance();
const dragon4 = DragonGuardianStatic.getInstance();
dragon3.showIdentity();
dragon4.showIdentity();
console.log("是同一條龍嗎?", dragon3 === dragon4);
console.log(dragon3.getTreasurePower());
/** output
古老巨龍覺醒了,開始守護寶珠...
我即是唯一,別無他物。實例: DragonGuardianStatic
我即是唯一,別無他物。實例: DragonGuardianStatic
是同一條龍嗎? true
你獲得了 創世魔法寶珠 的力量!
*/
Singleton 設計模式就像我們故事中的孤高巨龍守護者,確保整個系統中只有一個實例存在:
核心特點:
使用時機:
注意事項: