設計模式是軟體開發中可復用的解決方案模板。本文以淺顯易懂的方式,介紹兩大基石模式——單例與工廠——的定義、用途及實際應用時機。
確保某個類別在整個應用程式生命週期中,只存在一個實例,並提供全域存取點。
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) instance = new Singleton();
}
}
return instance;
}
}
定義一個建立物件的介面,讓子類別決定實例化哪個具體類別。呼叫端只需向工廠「下單」,無需知道具體建立細節。
你想吃雞翅,不管去麥當勞還是肯德基,只跟服務員說「來四塊雞翅」。麥當勞、肯德基就是兩個具體工廠,都能生產「雞翅」這個產品介面。
interface Chicken { void eat(); }
class McChicken implements Chicken { public void eat() { System.out.println("麥當勞雞翅"); } }
class KFCChicken implements Chicken { public void eat() { System.out.println("肯德基雞翅"); } }
class ChickenFactory {
public static Chicken createChicken(String type) {
if ("Mc".equals(type)) return new McChicken();
if ("KFC".equals(type)) return new KFCChicken();
throw new IllegalArgumentException("未知品牌");
}
}
// 使用
Chicken c = ChickenFactory.createChicken("Mc");
c.eat(); // 輸出:麥當勞雞翅
| 模式 | 核心目的 | 典型場景 |
|---|---|---|
| 單例 | 全域唯一實例 | 連線池、快取、設定管理 |
| 工廠 | 封裝建立邏輯、解耦 | 多實作切換、複雜物件組裝 |
單例解決「只能有一個」的問題;工廠解決「誰來建立、建立什麼」的問題。掌握這兩個模式,能大幅提升程式碼的可維護性與擴充性。進階學習可參考《Head First 設計模式》或 GoF 經典著作。